summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (from parent 1: 7bd07c5)
raw | patch | inline | side by side (from parent 1: 7bd07c5)
author | fredboy <fredboy@protonmail.com> | |
Tue, 16 Apr 2024 09:50:59 +0000 (16:50 +0700) | ||
committer | fredboy <fredboy@protonmail.com> | |
Tue, 16 Apr 2024 09:50:59 +0000 (16:50 +0700) |
core/src/ru/deadsoftware/cavedroid/game/GamePhysics.java | patch | blob | history | |
core/src/ru/deadsoftware/cavedroid/game/world/GameWorldGenerator.kt | patch | blob | history |
diff --git a/core/src/ru/deadsoftware/cavedroid/game/GamePhysics.java b/core/src/ru/deadsoftware/cavedroid/game/GamePhysics.java
index 9149705aefc07f1e97c337164434a93221928d2c..38253948725eae1e5fbf6c874509d1d7fe13f771 100644 (file)
if (d == -1) {
mob.setCanJump(true);
mob.setFlyMode(false);
-
- int dmg = ((int)Math.max(0f, (((mob.getVelocity().y * mob.getVelocity().y) / (2 * gravity.y)) - 48f) / 16f));
- if (dmg > 0) System.out.println("Damage: " + dmg);
}
mob.y = MathUtils.round(mob.getY());
//todo fall damage
// h = (v^2) / 2g
// dmg = max(0, (h - 48) / 32) - half of blocks fallen starting from 3 blocks height
+ // int dmg = ((int)Math.max(0f, (((mob.getVelocity().y * mob.getVelocity().y) / (2 * gravity.y)) - 48f) / 16f));
+ // if (dmg > 0) System.out.println("Damage: " + dmg);
} else {
mob.y += 1;
private void mobPhy(Mob mob, float delta) {
if (mob.getType() == Mob.Type.MOB && GameItems.isFluid(getBlock(mob))) {
- if (mob.getVelocity().y > 540) {
- mob.getVelocity().add(0, -5.4f);
+ if (mob.getVelocity().y > 32f) {
+ mob.getVelocity().y -= mob.getVelocity().y * 32f * delta;
}
- mob.getVelocity().add(0, -30f);
+ mob.getVelocity().y += PL_JUMP_VELOCITY * delta;
- if (mob.getVelocity().y < -180) {
- mob.getVelocity().y = -180;
+ if (mob.getVelocity().y < -PL_SPEED) {
+ mob.getVelocity().y = -PL_SPEED;
}
- } else if (!mob.isFlyMode() && mob.getVelocity().y < 1080) {
- mob.getVelocity().add(gravity);
+ } else if (!mob.isFlyMode() && mob.getVelocity().y < PL_TERMINAL_VELOCITY) {
+ mob.getVelocity().y += gravity.y * delta;
}
mob.y += mob.getVelocity().y * delta;
mobXColl(mob);
if (mob.canJump() && mob.getVelocity().x != 0 && checkJump(mob)) {
- mob.getVelocity().add(0, -480);
+ mob.getVelocity().y += PL_JUMP_VELOCITY;
mob.setCanJump(false);
}
}
diff --git a/core/src/ru/deadsoftware/cavedroid/game/world/GameWorldGenerator.kt b/core/src/ru/deadsoftware/cavedroid/game/world/GameWorldGenerator.kt
index dd64c6a04077d02c1cce66c567311749a304e2f1..bc5ffa4cc4afdaf382e2b626844667fb0fe96e3e 100644 (file)
object GameWorldGenerator {
+ private const val BIOME_MIN_SIZE = 64
+
+ private enum class Biome {
+ PLAINS,
+ DESERT
+ }
+
private fun generateHeights(width: Int, min: Int, max: Int, random: Random) = IntArray(width).apply {
set(0, (min + max) / 2)
for (x in 1 until width) {
}
}
+ private fun generateBiomes(width: Int, random: Random) = buildMap<Int, Biome> {
+ val xSequence = sequence {
+ var lastX = 0
+ var count = 0
+
+ while (lastX < width - BIOME_MIN_SIZE - 1) {
+ yield(lastX)
+
+ lastX = random.nextInt(lastX + BIOME_MIN_SIZE, width)
+ count++
+ }
+ }
+
+ return xSequence.associateWith { Biome.values()[random.nextInt(Biome.values().size)] }
+ }
+
+ private fun plainsBiome(
+ foreMap: Array<IntArray>,
+ backMap: Array<IntArray>,
+ width: Int,
+ height: Int,
+ x: Int,
+ xHeight: Int,
+ random: Random,
+ ) {
+ foreMap[x][xHeight] = GameItems.getBlockId("grass")
+ foreMap[x][height - 1] = GameItems.getBlockId("bedrock")
+ backMap[x][xHeight] = GameItems.getBlockId("grass")
+ backMap[x][height - 1] = GameItems.getBlockId("bedrock")
+
+ for (y in xHeight + 1 until height - 1) {
+ foreMap[x][y] = when {
+ y < xHeight + random.nextInt(5, 8) -> GameItems.getBlockId("dirt")
+ else -> GameItems.getBlockId("stone")
+ }
+ backMap[x][y] = foreMap[x][y]
+ }
+ }
+
+ private fun desertBiome(
+ foreMap: Array<IntArray>,
+ backMap: Array<IntArray>,
+ width: Int,
+ height: Int,
+ x: Int,
+ xHeight: Int,
+ random: Random,
+ ) {
+ foreMap[x][xHeight] = GameItems.getBlockId("sand")
+ foreMap[x][height - 1] = GameItems.getBlockId("bedrock")
+ backMap[x][xHeight] = GameItems.getBlockId("sand")
+ backMap[x][height - 1] = GameItems.getBlockId("bedrock")
+
+ for (y in xHeight + 1 until height - 1) {
+ foreMap[x][y] = when {
+ y < xHeight + random.nextInt(5, 8) -> GameItems.getBlockId("sand")
+ else -> GameItems.getBlockId("stone")
+ }
+ backMap[x][y] = foreMap[x][y]
+ }
+ }
+
/**
* Generates world of given width and height with given seed
* @param width world width
val foreMap = Array(width) { IntArray(height) }
val backMap = Array(width) { IntArray(width) }
val heightsMap = generateHeights(width, height / 2, height * 3 / 4, random)
+ val biomesMap = generateBiomes(width, random)
+
+ var biome = Biome.PLAINS
for (x in 0 until width) {
val xHeight = heightsMap[x]
+ biome = biomesMap[x] ?: biome
- foreMap[x][xHeight] = GameItems.getBlockId("grass")
- foreMap[x][height - 1] = GameItems.getBlockId("bedrock")
- backMap[x][xHeight] = GameItems.getBlockId("grass")
- backMap[x][height - 1] = GameItems.getBlockId("bedrock")
-
- for (y in xHeight + 1 until height - 1) {
- foreMap[x][y] = when {
- y < xHeight + random.nextInt(5, 8) -> GameItems.getBlockId("dirt")
- else -> GameItems.getBlockId("stone")
- }
- backMap[x][y] = foreMap[x][y]
+ when (biome) {
+ Biome.PLAINS -> plainsBiome(foreMap, backMap, width, height, x, xHeight, random)
+ Biome.DESERT -> desertBiome(foreMap, backMap, width, height, x, xHeight, random)
}
+
}
return Pair(foreMap, backMap)
}