From aff9fb6181dad8e22e74d99660ba5b77b151ad45 Mon Sep 17 00:00:00 2001 From: niketmm Date: Sun, 1 May 2022 20:46:09 +0530 Subject: [PATCH] Added : DinoGame --- .../baseio/composeplayground/MainActivity.kt | 16 +- .../contributors/NiketJain.kt | 32 ++++ .../niket/dino_game/game/DinoGameState.kt | 141 +++++++++++++++ .../niket/dino_game/game/DinoGameView.kt | 124 +++++++++++++ .../dino_game/game/GameStateController.kt | 167 ++++++++++++++++++ .../niket/dino_game/model/CactusObstacles.kt | 10 ++ .../niket/dino_game/model/CloudCoordinates.kt | 6 + .../niket/dino_game/model/CloudModel.kt | 10 ++ .../niket/dino_game/model/DinoGameModel.kt | 12 ++ .../niket/dino_game/model/DinoModel.kt | 16 ++ .../niket/dino_game/model/ObstacleModel.kt | 7 + .../dino_game/util/CommonDinoGameElements.kt | 40 +++++ .../util/createRandomObstaclesList.kt | 65 +++++++ .../composeplayground/ui/theme/Color.kt | 3 +- .../main/res/drawable-mdpi/cacti_group.png | Bin 0 -> 1146 bytes .../main/res/drawable-mdpi/cacti_large_1.png | Bin 0 -> 4321 bytes .../main/res/drawable-mdpi/cacti_large_2.png | Bin 0 -> 6455 bytes .../main/res/drawable-mdpi/cacti_small_1.png | Bin 0 -> 3023 bytes .../main/res/drawable-mdpi/cacti_small_2.png | Bin 0 -> 4881 bytes .../main/res/drawable-mdpi/cacti_small_3.png | Bin 0 -> 5926 bytes .../main/res/drawable-mdpi/dino_1_still.png | Bin 0 -> 4979 bytes app/src/main/res/drawable-mdpi/dino_2.png | Bin 0 -> 4879 bytes .../main/res/drawable-mdpi/dino_collided.png | Bin 0 -> 5188 bytes .../res/drawable-mdpi/dino_collided_2.png | Bin 0 -> 5135 bytes .../res/drawable-mdpi/dino_game_cloud.png | Bin 0 -> 761 bytes .../res/drawable-mdpi/dino_game_ground.png | Bin 0 -> 1209 bytes .../main/res/drawable-mdpi/dino_left_leg.png | Bin 0 -> 4943 bytes .../main/res/drawable-mdpi/dino_right_leg.png | Bin 0 -> 4899 bytes app/src/main/res/values/strings.xml | 2 + 29 files changed, 649 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/dev/baseio/composeplayground/contributors/NiketJain.kt create mode 100644 app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/game/DinoGameState.kt create mode 100644 app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/game/DinoGameView.kt create mode 100644 app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/game/GameStateController.kt create mode 100644 app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/CactusObstacles.kt create mode 100644 app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/CloudCoordinates.kt create mode 100644 app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/CloudModel.kt create mode 100644 app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/DinoGameModel.kt create mode 100644 app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/DinoModel.kt create mode 100644 app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/ObstacleModel.kt create mode 100644 app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/util/CommonDinoGameElements.kt create mode 100644 app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/util/createRandomObstaclesList.kt create mode 100644 app/src/main/res/drawable-mdpi/cacti_group.png create mode 100644 app/src/main/res/drawable-mdpi/cacti_large_1.png create mode 100644 app/src/main/res/drawable-mdpi/cacti_large_2.png create mode 100644 app/src/main/res/drawable-mdpi/cacti_small_1.png create mode 100644 app/src/main/res/drawable-mdpi/cacti_small_2.png create mode 100644 app/src/main/res/drawable-mdpi/cacti_small_3.png create mode 100644 app/src/main/res/drawable-mdpi/dino_1_still.png create mode 100644 app/src/main/res/drawable-mdpi/dino_2.png create mode 100644 app/src/main/res/drawable-mdpi/dino_collided.png create mode 100644 app/src/main/res/drawable-mdpi/dino_collided_2.png create mode 100644 app/src/main/res/drawable-mdpi/dino_game_cloud.png create mode 100644 app/src/main/res/drawable-mdpi/dino_game_ground.png create mode 100644 app/src/main/res/drawable-mdpi/dino_left_leg.png create mode 100644 app/src/main/res/drawable-mdpi/dino_right_leg.png diff --git a/app/src/main/java/dev/baseio/composeplayground/MainActivity.kt b/app/src/main/java/dev/baseio/composeplayground/MainActivity.kt index 7ee3217..b0de322 100644 --- a/app/src/main/java/dev/baseio/composeplayground/MainActivity.kt +++ b/app/src/main/java/dev/baseio/composeplayground/MainActivity.kt @@ -9,6 +9,7 @@ import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material.MaterialTheme @@ -41,6 +42,7 @@ import dev.baseio.composeplayground.ui.animations.anmolverma.BellAnimation import dev.baseio.composeplayground.ui.animations.anmolverma.ShootingStarsAnimation import dev.baseio.composeplayground.ui.animations.anmolverma.planetarysystem.PlanetarySystem import dev.baseio.composeplayground.ui.animations.anmolverma.pulltorefresh.PullToRefreshOne +import dev.baseio.composeplayground.ui.animations.niket.dino_game.game.DinoGameView import dev.baseio.composeplayground.ui.theme.ComposePlaygroundTheme class MainActivity : ComponentActivity() { @@ -81,7 +83,7 @@ class MainActivity : ComponentActivity() { ) { HorizontalPager( modifier = Modifier.fillMaxSize(), - count = 15, state = pagerState, + count = 21, state = pagerState, ) { page -> // Our page content when (page) { @@ -183,6 +185,18 @@ class MainActivity : ComponentActivity() { ShubhamSingh(modifier = Modifier.align(Alignment.BottomCenter)) } } + 20 -> { + BoxWithConstraints( + modifier = Modifier + .fillMaxSize() + ) { + DinoGameView( + windowResource = applicationContext.resources, + maxWidth = maxWidth, + maxHeight = maxHeight, + ) + } + } } } } diff --git a/app/src/main/java/dev/baseio/composeplayground/contributors/NiketJain.kt b/app/src/main/java/dev/baseio/composeplayground/contributors/NiketJain.kt new file mode 100644 index 0000000..8c04cc2 --- /dev/null +++ b/app/src/main/java/dev/baseio/composeplayground/contributors/NiketJain.kt @@ -0,0 +1,32 @@ +package dev.baseio.composeplayground.contributors + +import androidx.compose.foundation.layout.* +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import dev.baseio.composeplayground.R +import dev.baseio.composeplayground.ui.theme.Typography + + +const val niketJainImageUrl = "https://avatars.githubusercontent.com/u/52085669?v=4" + +@Composable +fun NiketJain(modifier: Modifier = Modifier) { + Row(verticalAlignment = Alignment.CenterVertically, modifier = modifier.padding(4.dp)) { + CoilImageBox(Modifier.size(64.dp), niketJainImageUrl) + Column(verticalArrangement = Arrangement.Center, modifier = Modifier.padding(8.dp)) { + Text( + text = stringResource(id = R.string.niket_name), + style = Typography.h6.copy(MaterialTheme.colors.onSurface), + ) + Text( + text = stringResource(id = R.string.niket_email), + style = Typography.subtitle1.copy(MaterialTheme.colors.onSurface), + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/game/DinoGameState.kt b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/game/DinoGameState.kt new file mode 100644 index 0000000..bb963da --- /dev/null +++ b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/game/DinoGameState.kt @@ -0,0 +1,141 @@ +package dev.baseio.composeplayground.ui.animations.niket.dino_game.game + +import androidx.compose.animation.core.Animatable +import androidx.compose.animation.core.LinearEasing +import androidx.compose.animation.core.animateFloat +import androidx.compose.animation.core.infiniteRepeatable +import androidx.compose.animation.core.rememberInfiniteTransition +import androidx.compose.animation.core.tween +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import dev.baseio.composeplayground.ui.animations.niket.dino_game.model.CactusObstacles +import dev.baseio.composeplayground.ui.animations.niket.dino_game.model.CloudCoordinates +import dev.baseio.composeplayground.ui.animations.niket.dino_game.model.CloudModel +import dev.baseio.composeplayground.ui.animations.niket.dino_game.model.DinoGameModel +import dev.baseio.composeplayground.ui.animations.niket.dino_game.model.DinoModel +import dev.baseio.composeplayground.ui.animations.niket.dino_game.model.ObstacleModel + +/* + Various methods to handle and change the state of the + different objects. + */ +@Composable +fun dinoGameState( + obstaclesList: MutableList, + cloudList: MutableList, +): DinoGameModel { + val animationScope = rememberCoroutineScope() + + val obstaclesList = createRandomGameObstacles(obstaclesList = obstaclesList) + val cloudList = createRandomClouds(cloudList = cloudList) + + // Create Dino + val dinoXPosition by remember { mutableStateOf(200f) } + val dinoYPosition by remember { mutableStateOf(1320f) } + val animatableDinoX = remember { Animatable(initialValue = dinoXPosition) } + val animatableDinoY = remember { Animatable(initialValue = dinoYPosition) } + val isRunning by remember { mutableStateOf(true) } + val isJumping by remember { mutableStateOf(false) } + val isCollided by remember { mutableStateOf(false) } + + val infiniteTransition = rememberInfiniteTransition() + val runningDinoAnimationState = infiniteTransition.animateFloat( + initialValue = 0f, + targetValue = 5f, + animationSpec = infiniteRepeatable( + animation = tween( + durationMillis = 400, + easing = LinearEasing + ) + ) + ) + + val dino = DinoModel( + xPosition = dinoXPosition, + yPosition = dinoYPosition, + isRunning = isRunning, + isJumping = isJumping, + isCollided = isCollided, + animateX = animatableDinoX, + animateY = animatableDinoY, + dinoState = runningDinoAnimationState + ) + + return DinoGameModel( + dino = dino, + coroutineScope = animationScope, + obstaclesList = obstaclesList, + cloudList = cloudList + ) +} + +@Composable +fun createRandomClouds(cloudList: MutableList): MutableList { + + val isMoving by remember { mutableStateOf(true) } + val cloudStateList = mutableListOf() + + for (cloud: CloudCoordinates in cloudList) { + val infiniteTransition = rememberInfiniteTransition() + val floatingCloudToLeftInfiniteTransition = infiniteTransition.animateFloat( + initialValue = cloud.xPosition, + targetValue = -cloud.xPosition, + animationSpec = infiniteRepeatable( + animation = tween( + durationMillis = (cloud.xPosition * 15).toInt() / 2, + easing = LinearEasing + ) + ) + ) + + cloudStateList.add( + CloudModel( + cloudCoordinates = cloud, + isMoving = isMoving, + cloudState = floatingCloudToLeftInfiniteTransition + ) + ) + } + + return cloudStateList +} + + +@Composable +fun createRandomGameObstacles( + obstaclesList: MutableList +): MutableList { + val cactusObstaclesList = mutableListOf() + + for (obstacles: ObstacleModel in obstaclesList) { + val isCollision by remember { + mutableStateOf(false) + } + + val infiniteObstaclesTransition = rememberInfiniteTransition() + val obstaclesTransition = infiniteObstaclesTransition.animateFloat( + initialValue = obstacles.xPosition, + targetValue = -obstacles.xPosition.div(1000f), + animationSpec = infiniteRepeatable( + animation = tween( + durationMillis = (obstacles.xPosition * 5).toInt() / 2, + easing = LinearEasing + ) + ) + ) + + cactusObstaclesList.add( + CactusObstacles( + obstacleModel = obstacles, + isCollision = isCollision, + isPassedOutOfScreen = false, + cactusObstaclesState = obstaclesTransition + ) + ) + } + + return cactusObstaclesList +} \ No newline at end of file diff --git a/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/game/DinoGameView.kt b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/game/DinoGameView.kt new file mode 100644 index 0000000..ce73313 --- /dev/null +++ b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/game/DinoGameView.kt @@ -0,0 +1,124 @@ +package dev.baseio.composeplayground.ui.animations.niket.dino_game.game + +import android.content.res.Resources +import androidx.compose.animation.core.LinearOutSlowInEasing +import androidx.compose.animation.core.tween +import androidx.compose.foundation.Canvas +import androidx.compose.foundation.background +import androidx.compose.foundation.gestures.detectTapGestures +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.drawscope.DrawScope +import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.unit.Dp +import dev.baseio.composeplayground.ui.animations.niket.dino_game.model.CactusObstacles +import dev.baseio.composeplayground.ui.animations.niket.dino_game.model.CloudModel +import dev.baseio.composeplayground.ui.animations.niket.dino_game.model.DinoGameModel +import dev.baseio.composeplayground.ui.animations.niket.dino_game.util.createRandomCloudsList +import dev.baseio.composeplayground.ui.animations.niket.dino_game.util.createRandomObstaclesList +import dev.baseio.composeplayground.contributors.NiketJain +import dev.baseio.composeplayground.ui.theme.DarkDinoGameBackground +import kotlinx.coroutines.launch + +@Composable +fun DinoGameView( + windowResource: Resources, + maxWidth: Dp, + maxHeight: Dp, +) { + val dinoGameState = dinoGameState( + createRandomObstaclesList(maxHeight), + createRandomCloudsList(maxWidth) + ) + + /** + * Drawing every object at the canvas + */ + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.BottomCenter + ) { + CreateGameCanvas( + gameState = dinoGameState, + drawGameView = { drawScope -> + drawScope.drawGround(resource = windowResource) + drawScope.drawDino( + gameState = dinoGameState, + resource = windowResource + ) + removeThePassedObstacles(dinoGameState) + for (obstacles: CactusObstacles in dinoGameState.obstaclesList) { + drawScope.drawObstacles( + resource = windowResource, + obstacles = obstacles, + dinoGameState = dinoGameState + ) + } + for (cloud: CloudModel in dinoGameState.cloudList) { + drawScope.drawCloud( + resources = windowResource, + cloudModel = cloud + ) + } + } + ) + NiketJain() + } +} + +@Composable +private fun CreateGameCanvas( + gameState: DinoGameModel, + drawGameView: (DrawScope) -> Unit +) { + Canvas( + modifier = Modifier + .fillMaxSize() + .background( + color = DarkDinoGameBackground + ) + .pointerInput(Unit) { + /** When Clicked make the Dino Jump **/ + detectTapGestures { + gameState.dino.isJumping = true + if (gameState.dino.isJumping) { + gameState.coroutineScope.launch { + gameState.dino.isRunning = false + gameState.dino.animateY.animateTo( + targetValue = gameState.dino.yPosition - 175, + animationSpec = tween( + durationMillis = 275, + easing = LinearOutSlowInEasing + ) + ) + gameState.dino.animateY.animateTo( + targetValue = gameState.dino.yPosition, + animationSpec = tween( + durationMillis = 325, + easing = LinearOutSlowInEasing + ) + ) + gameState.dino.isRunning = true + gameState.dino.isJumping = false + } + } + } + }, + ) { + drawGameView(this) + } +} + +/* + Removing the Obstacles to save the Resources + We are removing the item that has been passed the X-axis screen. + */ +fun removeThePassedObstacles(gameState: DinoGameModel) { + gameState.obstaclesList.removeAll { obstacles -> + obstacles.isPassedOutOfScreen && (obstacles.obstacleModel.xPosition <= 0) + } + +} diff --git a/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/game/GameStateController.kt b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/game/GameStateController.kt new file mode 100644 index 0000000..e19bb4b --- /dev/null +++ b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/game/GameStateController.kt @@ -0,0 +1,167 @@ +package dev.baseio.composeplayground.ui.animations.niket.dino_game.game + +import android.content.res.Resources +import android.util.Log +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.Paint +import androidx.compose.ui.graphics.drawscope.DrawScope +import androidx.compose.ui.res.imageResource +import dev.baseio.composeplayground.ui.animations.niket.dino_game.model.CactusObstacles +import dev.baseio.composeplayground.ui.animations.niket.dino_game.model.CloudModel +import dev.baseio.composeplayground.ui.animations.niket.dino_game.model.DinoGameModel +import dev.baseio.composeplayground.ui.animations.niket.dino_game.util.getDinoRunningResource +import dev.baseio.composeplayground.ui.animations.niket.dino_game.util.randomCactiObstaclesListItem +import dev.baseio.composeplayground.R + +fun DrawScope.drawDino( + resource: Resources, + gameState: DinoGameModel +) { + val paint = Paint().asFrameworkPaint() + with(gameState) { + + /** + * This is to debug the code, use to display the coordinates of the animating objects. + */ +// paint.apply { +// isAntiAlias = true +// textSize = 24f +// typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) +// } +// drawIntoCanvas { +// it.nativeCanvas.drawText( +// "${gameState.dino.xPosition}, ${gameState.dino.yPosition}", +// gameState.dino.xPosition, +// gameState.dino.yPosition - 10, +// paint +// ) +// } + + drawImage( + image = ImageBitmap.imageResource( + id = getDinoRunningResource( + dinoState = dino.dinoState, + isCollided = dino.isCollided, + isJumping = dino.isJumping + ), + res = resource + ), + Offset( + x = dino.animateX.value, + y = dino.animateY.value + ) + ) + } +} + +fun DrawScope.drawGround( + resource: Resources +) { + drawImage( + image = ImageBitmap.imageResource( + id = R.drawable.dino_game_ground, + res = resource + ), + Offset( + x = 0f, + y = 1400f + ) + ) +} + +fun DrawScope.drawCloud( + resources: Resources, + cloudModel: CloudModel, +) { + with(cloudModel) { + cloudModel.cloudCoordinates.xPosition = cloudState.value + drawImage( + image = ImageBitmap.imageResource( + id = R.drawable.dino_game_cloud, + res = resources, + ), + Offset( + x = cloudCoordinates.xPosition, + y = cloudCoordinates.yPosition, + ), + ) + } +} + +fun DrawScope.drawObstacles( + resource: Resources, + obstacles: CactusObstacles, + dinoGameState: DinoGameModel +) { + val paint = Paint().asFrameworkPaint() + with(obstacles) { + isCollision = detectCollision(dinoGameState) + checkCollisionAndBehindObstaclesState(dinoGameState, isCollision, obstacles) + obstacleModel.xPosition = cactusObstaclesState.value + val randomObstacles = randomCactiObstaclesListItem() + + /** + * This is to debug the code, use to display the coordinates of the Moving objects. + */ +// paint.apply { +// isAntiAlias = true +// textSize = 24f +// typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD) +// } +// drawIntoCanvas { +// it.nativeCanvas.drawText( +// "${obstacles.obstacleModel.xPosition}, ${obstacles.obstacleModel.yPosition}", +// obstacles.obstacleModel.xPosition, +// obstacles.obstacleModel.yPosition - 10, +// paint +// ) +// } + + drawImage( + image = ImageBitmap.imageResource( + res = resource, + id = R.drawable.cacti_small_1 + ), + Offset( + x = obstacleModel.xPosition, + y = 1350f + ) + ) + } +} + +/** + * This is WIP + */ +fun CactusObstacles.detectCollision(dinoGameState: DinoGameModel): Boolean { + return (dinoGameState.dino.xPosition <= obstacleModel.xPosition && dinoGameState.dino.xPosition == obstacleModel.xPosition + 5) + && (dinoGameState.dino.yPosition <= this.obstacleModel.yPosition && dinoGameState.dino.yPosition - 5 >= this.obstacleModel.yPosition) +} + +fun checkCollisionAndBehindObstaclesState( + dinoGameState: DinoGameModel, + collision: Boolean, + queriedObstacles: CactusObstacles +) { + if (collision) { + dinoGameState.obstaclesList.find { obstacle -> + obstacle.obstacleModel.id == queriedObstacles.obstacleModel.id + }?.apply { + dinoGameState.dino.isRunning = false + dinoGameState.dino.isCollided = true + Log.d( + "Collision", + "checkCollisionAndBehindObstaclesState: ${dinoGameState.dino.isCollided}" + ) + } + } + + if (queriedObstacles.obstacleModel.xPosition <= 0) { + dinoGameState.obstaclesList.find { obstacle -> + obstacle.obstacleModel.id == queriedObstacles.obstacleModel.id + }?.apply { + isPassedOutOfScreen = true + } + } +} diff --git a/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/CactusObstacles.kt b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/CactusObstacles.kt new file mode 100644 index 0000000..6948708 --- /dev/null +++ b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/CactusObstacles.kt @@ -0,0 +1,10 @@ +package dev.baseio.composeplayground.ui.animations.niket.dino_game.model + +import androidx.compose.runtime.State + +data class CactusObstacles( + var obstacleModel: ObstacleModel, + var isCollision : Boolean = false, + var isPassedOutOfScreen : Boolean = false, + var cactusObstaclesState : State +) \ No newline at end of file diff --git a/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/CloudCoordinates.kt b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/CloudCoordinates.kt new file mode 100644 index 0000000..31c831e --- /dev/null +++ b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/CloudCoordinates.kt @@ -0,0 +1,6 @@ +package dev.baseio.composeplayground.ui.animations.niket.dino_game.model + +data class CloudCoordinates( + var xPosition : Float = 500f, + val yPosition : Float = 500f, +) \ No newline at end of file diff --git a/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/CloudModel.kt b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/CloudModel.kt new file mode 100644 index 0000000..9970f93 --- /dev/null +++ b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/CloudModel.kt @@ -0,0 +1,10 @@ +package dev.baseio.composeplayground.ui.animations.niket.dino_game.model + +import androidx.compose.runtime.State +import dev.baseio.composeplayground.ui.animations.niket.dino_game.model.CloudCoordinates + +data class CloudModel( + var cloudCoordinates: CloudCoordinates, + var isMoving : Boolean = true, + var cloudState : State +) \ No newline at end of file diff --git a/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/DinoGameModel.kt b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/DinoGameModel.kt new file mode 100644 index 0000000..2e00d7d --- /dev/null +++ b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/DinoGameModel.kt @@ -0,0 +1,12 @@ +package dev.baseio.composeplayground.ui.animations.niket.dino_game.model + +import kotlinx.coroutines.CoroutineScope + +data class DinoGameModel( + val obstaclesList : MutableList, + val dino : DinoModel, + val cloudList : MutableList, + val coroutineScope: CoroutineScope, + val currentScore : Int = 0, + val highestScore : Int = 0 +) \ No newline at end of file diff --git a/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/DinoModel.kt b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/DinoModel.kt new file mode 100644 index 0000000..1f5ac35 --- /dev/null +++ b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/DinoModel.kt @@ -0,0 +1,16 @@ +package dev.baseio.composeplayground.ui.animations.niket.dino_game.model + +import androidx.compose.animation.core.Animatable +import androidx.compose.animation.core.AnimationVector1D +import androidx.compose.runtime.State + +data class DinoModel( + var xPosition : Float, + var yPosition : Float = 1400f, + var isRunning : Boolean = true, + var isJumping : Boolean = false, + var isCollided : Boolean = false, + var animateX : Animatable, + var animateY : Animatable, + var dinoState : State +) \ No newline at end of file diff --git a/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/ObstacleModel.kt b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/ObstacleModel.kt new file mode 100644 index 0000000..dabe863 --- /dev/null +++ b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/model/ObstacleModel.kt @@ -0,0 +1,7 @@ +package dev.baseio.composeplayground.ui.animations.niket.dino_game.model + +data class ObstacleModel( + val id: Long, + var xPosition: Float, + var yPosition: Float = 1400f, +) diff --git a/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/util/CommonDinoGameElements.kt b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/util/CommonDinoGameElements.kt new file mode 100644 index 0000000..ea002bc --- /dev/null +++ b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/util/CommonDinoGameElements.kt @@ -0,0 +1,40 @@ +package dev.baseio.composeplayground.ui.animations.niket.dino_game.util + +import androidx.compose.runtime.State +import dev.baseio.composeplayground.R + +/** + * Animate Dino at specific conditions. + */ +fun getDinoRunningResource( + dinoState: State, + isCollided: Boolean, + isJumping : Boolean +): Int { + + if (isCollided) { + return R.drawable.dino_collided_2 + } + if (isJumping){ + return R.drawable.dino_1_still + } + when (dinoState.value) { + in 0.0f..1.0f -> { + return (R.drawable.dino_right_leg) + } + in 1.0f..2.0f -> { + return (R.drawable.dino_left_leg) + } + in 2.0f..3.0f -> { + return (R.drawable.dino_right_leg) + } + in 3.0f..4.0f -> { + return (R.drawable.dino_left_leg) + } + in 4.0f..5.0f -> { + return (R.drawable.dino_right_leg) + } + } + + return R.drawable.dino_1_still +} \ No newline at end of file diff --git a/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/util/createRandomObstaclesList.kt b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/util/createRandomObstaclesList.kt new file mode 100644 index 0000000..82db093 --- /dev/null +++ b/app/src/main/java/dev/baseio/composeplayground/ui/animations/niket/dino_game/util/createRandomObstaclesList.kt @@ -0,0 +1,65 @@ +package dev.baseio.composeplayground.ui.animations.niket.dino_game.util + +import androidx.compose.ui.unit.Dp +import dev.baseio.composeplayground.ui.animations.niket.dino_game.model.CloudCoordinates +import dev.baseio.composeplayground.ui.animations.niket.dino_game.model.ObstacleModel +import dev.baseio.composeplayground.R +import kotlin.random.Random + +/** + * This create the Random Cactus Obstacles, + * The Random Number btw 800-1000 help us to get essentials gap btw consecutive obstacles. + * MaxScreen Width value is btw 600-700 that's why we multiply it with 2.5F value + */ +fun createRandomObstaclesList( + maxScreenWidth: Dp +): MutableList { + val cactusObstaclesList = mutableListOf() + val cactusNumber = Random.nextInt(100, 150) + for (i in 1..cactusNumber) { + cactusObstaclesList.add( + element = ObstacleModel( + id = i * System.currentTimeMillis(), + xPosition = maxScreenWidth.value * 2.5f + (i * Random.nextInt(600, 800)), + yPosition = 1400f + ) + ) + } + return cactusObstaclesList +} + +/** + * This create the Random Clouds Obstacles, + * The Random Number btw 500-1000 help us to get essentials gap btw consecutive clouds. + * MaxScreen Width value is btw 600-700 that's why we multiply it with 2.5F value + */ +fun createRandomCloudsList( + maxScreenWidth: Dp +): MutableList { + + val cloudList = mutableListOf() + val cloudNumber = Random.nextInt(from = 4, 10) + for (i in 0..cloudNumber) { + cloudList.add( + element = CloudCoordinates( + xPosition = maxScreenWidth.value * 2.5f + (i * Random.nextInt(500, 1000)), + yPosition = Random.nextInt(150, 750).toFloat(), + ) + ) + } + + return cloudList +} + +fun randomCactiObstaclesListItem(): Int { + val randomCactiObstaclesList = mutableListOf( + R.drawable.cacti_large_1, + R.drawable.cacti_large_2, + R.drawable.cacti_small_1, + R.drawable.cacti_small_2, + R.drawable.cacti_small_3, + R.drawable.cacti_group, + ) + + return randomCactiObstaclesList.random() +} diff --git a/app/src/main/java/dev/baseio/composeplayground/ui/theme/Color.kt b/app/src/main/java/dev/baseio/composeplayground/ui/theme/Color.kt index d1b0ad3..4afa9a9 100644 --- a/app/src/main/java/dev/baseio/composeplayground/ui/theme/Color.kt +++ b/app/src/main/java/dev/baseio/composeplayground/ui/theme/Color.kt @@ -5,4 +5,5 @@ import androidx.compose.ui.graphics.Color val Purple200 = Color(0xFFBB86FC) val Purple500 = Color(0xFF6200EE) val Purple700 = Color(0xFF3700B3) -val Teal200 = Color(0xFF03DAC5) \ No newline at end of file +val Teal200 = Color(0xFF03DAC5) +val DarkDinoGameBackground = Color(0xFF2D4263) \ No newline at end of file diff --git a/app/src/main/res/drawable-mdpi/cacti_group.png b/app/src/main/res/drawable-mdpi/cacti_group.png new file mode 100644 index 0000000000000000000000000000000000000000..795fa22a029c0cd33587158a801edf1d71058ce2 GIT binary patch literal 1146 zcmV-=1cm#FP)EX>4Tx04R}tkv&MmP!xqvQ>9WW4(%Y~kfAzR5EXIMDionYs1;guFnQ@8G-*gu zTpR`0f`dPcRR%ovd`>)O(gBGdxvqHp#<}FOz%yfJHZxBgBNj_ttaLFen;P*Haa`4O$`^7T ztDLtuYt=eypOfD(QqWhHxlU^sDJ)_M5=1Ddqk<}IBzBx-kgEbl zjs?`9L3aJ%Z}5AzR&jE|ONu0c-WSLD7y&}NK&#<6-^Y&AIst;uz?I(d*P6i0C+Urj z7C!<8wtswCDE&AdGT`>MD4k00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNlirueSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00L4;L_t(|+U?yva)U4shT%AqA_q*FI|+lrQbo)~5Q3m4EpL9yfo5e3 z8iSA&D`z)cHH$-13L$9tI;b*#f-D3fXj3+_xBFd*ajj(5u8TSe3qiD#po8m#=xlLx zau9@|b4Xh4c}=p50znAcM^bZEH|f431ToMKlI+Gq5CahdF%U5jF%Sb012GUW(6#k= zEIqT)43u2<2c1dIOaJ#E5Ht)yS3QZVeD0(6>X!3db~nsI&{<#8?e*k;iV26Wll;t*%@TvE&x4@Z2+EdC&6XW*6oQiL8_vC0MXS)k9{>OV M07*qoM6N<$f}ITZ?EnA( literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/cacti_large_1.png b/app/src/main/res/drawable-mdpi/cacti_large_1.png new file mode 100644 index 0000000000000000000000000000000000000000..d002ac8b459d6ad8851851c2efec197d245550eb GIT binary patch literal 4321 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 P00000NkvXXu0mjf#_>>r literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/cacti_large_2.png b/app/src/main/res/drawable-mdpi/cacti_large_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b2ec8c9c8cdb45f51e4c5319eca7be25e555707f GIT binary patch literal 6455 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 m!5(Ev+bO3000QedQ@0+Qek%> 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 RHS+)f002ovPDHLkV1fXFu$uq? literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/cacti_small_2.png b/app/src/main/res/drawable-mdpi/cacti_small_2.png new file mode 100644 index 0000000000000000000000000000000000000000..995270177a7e89258b5c36d81452accb5825e1bd GIT binary patch literal 4881 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 DTO&F@ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/cacti_small_3.png b/app/src/main/res/drawable-mdpi/cacti_small_3.png new file mode 100644 index 0000000000000000000000000000000000000000..48353c8582af668a90bbd312c37d0ee48657e942 GIT binary patch literal 5926 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 IM6N<$f|Tex+5i9m literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/dino_1_still.png b/app/src/main/res/drawable-mdpi/dino_1_still.png new file mode 100644 index 0000000000000000000000000000000000000000..b0653191d2df3e9dda3d3daa4dd9140a7f599cb4 GIT binary patch literal 4979 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/dino_game_cloud.png b/app/src/main/res/drawable-mdpi/dino_game_cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..f6fd638d31c9b0674ba42427d5dad34e61911528 GIT binary patch literal 761 zcmVEX>4Tx04R}tkv&MmP!xqvQ>9WW4(%Y~kfAzR5EXIMDionYs1;guFnQ@8G-*gu zTpR`0f`dPcRR%ovd`>)O(gBGdxvqHp#<}FOz%yfJHZxBgBNj_ttaLFen;P*Haa`4O$`^7T ztDLtuYt=eypOfD(QqWhHxlU^sDJ)_M5=1Ddqk<}IBzBx-kgEbl zjs?`9L3aJ%Z}5AzR&jE|ONu0c-WSLD7y&}NK&#<6-^Y&AIst;uz?I(d*P6i0C+Urj z7C!<8wtswCDE&AdGT`>MD4k00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNlirueSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{007ZRL_t(&-tE{y5`Z8G1yE_Y3irQ{9>!KK4RZ`g|KB&2 zJ_w^)YuX{Dl*bnl5sL7fS3*of(S>VrHOal}y~IPfariH?XGM;Rhj4=p^;mq4DmvP9 z0pXJo5%Szbj<_KBXl~xiEjJ!xA%y$3uqJ+Vf_YmB9HoRIeDj{&lQ}AO77lyK-hCQ@ z@Q*h7?Uci-Zh$!(!d)sw1Ie?pPnQbe!B4OaD6c9d1j0j|TwCxj#Y=dv=Zubl+6nG- r@ojw|+&GkTUOMib{&PwTgd67uiv)5@i#+j400000NkvXXu0mjfRQg4` literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/dino_game_ground.png b/app/src/main/res/drawable-mdpi/dino_game_ground.png new file mode 100644 index 0000000000000000000000000000000000000000..be13348f8a73068dd100d958da5096be46e03587 GIT binary patch literal 1209 zcmeAS@N?(olHy`uVBq!ia0y~y;EV^dB{^X_+~x z3=A3*YbV-z91aj^^$%Veq{a7E;n9SJR*?dtg;%sh7CNmEjVd*$d?{~|=@Aqo!+O1` z*}glJT|7NjHip&l1N)Ja7d%;a(ZIBQU=uDrPcu~oTTXd+f)AkgxAwg zES<2L$*qs|$^yr-zYp?1RBsC_EIQ=frP6p${P<4^MyK5ls~=k2Ki+rQim~bZfvNXC zUY~W~jQY#oJ~4YHwr!2wultt0VVrJ#;K5|Y*_*UkGdYhceW-IgKZSkKc87|yv!ko! zm-9PJOPjink&mzOqEPDk-*&6h2cL4F4((# zGEjuGz$3Dlfq`2Xgc%uT&5-~KvX^-Jy0SmvVicCszw~!9C|V^;Tq8=H^K)}k^GX<; zi&7IyQd1PlGfOfQ+&z5*!W;R-85o!*db&7S5uH&c;M~H@O>MW zwJN`hI)2^q-%;yF`FE=x>R$Nw>7u`!YV98R z+ZNniq1`iS{x|31_xo*tYKls4|6cuXMh)1vAWsMsR0HiX|rPylc11>wdnIz29E&eC~VuSF8+Qu6>W# rK4azoYyFD*uay73_ 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 N002ovPDHLkV1k;xdlUcw literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/dino_right_leg.png b/app/src/main/res/drawable-mdpi/dino_right_leg.png new file mode 100644 index 0000000000000000000000000000000000000000..6ba88a0a3cf92e40ea5cf98879b78b2d6a3f07a6 GIT binary patch literal 4899 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.verma@mutualmobile.com\nanmol.verma4@gmail.com Shubham Singh shubham.singh@mutualmobile.com + \@nikeight_ + niket.jain@mutualmobile.com LOADING \ No newline at end of file