working platform rendering

Former-commit-id: ec50eeb7f6fbf5799d197a88b036f60e51693336
Former-commit-id: 4172ffc733b8df89bc839b59476c57ac6bf3572d
This commit is contained in:
Song Minjae
2016-12-18 16:18:41 +09:00
parent 0db1130b41
commit ea1e90b035
3 changed files with 198 additions and 157 deletions

View File

@@ -9,6 +9,7 @@ import net.torvald.JsonWriter
import net.torvald.imagefont.TinyAlphNum import net.torvald.imagefont.TinyAlphNum
import org.lwjgl.input.Controllers import org.lwjgl.input.Controllers
import org.lwjgl.opengl.GL11 import org.lwjgl.opengl.GL11
import org.lwjgl.opengl.GL20
import org.newdawn.slick.* import org.newdawn.slick.*
import org.newdawn.slick.state.StateBasedGame import org.newdawn.slick.state.StateBasedGame
import java.io.File import java.io.File
@@ -316,12 +317,7 @@ constructor(gamename: String) : StateBasedGame(gamename) {
private fun createDirs() { private fun createDirs() {
val dirs = arrayOf(File(defaultSaveDir)) val dirs = arrayOf(File(defaultSaveDir))
dirs.forEach { if (!it.exists()) it.mkdirs() }
for (d in dirs) {
if (!d.exists()) {
d.mkdirs()
}
}
} }
@Throws(IOException::class) @Throws(IOException::class)

View File

@@ -64,48 +64,48 @@ object MapCamera {
* These are the tiles that only connects to itself, will not connect to colour variants * These are the tiles that only connects to itself, will not connect to colour variants
*/ */
val TILES_CONNECT_SELF = arrayOf( val TILES_CONNECT_SELF = arrayOf(
Tile.ICE_MAGICAL Tile.ICE_MAGICAL,
, Tile.GLASS_CRUDE Tile.GLASS_CRUDE,
, Tile.GLASS_CLEAN Tile.GLASS_CLEAN,
, Tile.ILLUMINATOR_BLACK Tile.ILLUMINATOR_BLACK,
, Tile.ILLUMINATOR_BLUE Tile.ILLUMINATOR_BLUE,
, Tile.ILLUMINATOR_BROWN Tile.ILLUMINATOR_BROWN,
, Tile.ILLUMINATOR_CYAN Tile.ILLUMINATOR_CYAN,
, Tile.ILLUMINATOR_FUCHSIA Tile.ILLUMINATOR_FUCHSIA,
, Tile.ILLUMINATOR_GREEN Tile.ILLUMINATOR_GREEN,
, Tile.ILLUMINATOR_GREEN_DARK Tile.ILLUMINATOR_GREEN_DARK,
, Tile.ILLUMINATOR_GREY_DARK Tile.ILLUMINATOR_GREY_DARK,
, Tile.ILLUMINATOR_GREY_LIGHT Tile.ILLUMINATOR_GREY_LIGHT,
, Tile.ILLUMINATOR_GREY_MED Tile.ILLUMINATOR_GREY_MED,
, Tile.ILLUMINATOR_ORANGE Tile.ILLUMINATOR_ORANGE,
, Tile.ILLUMINATOR_PURPLE Tile.ILLUMINATOR_PURPLE,
, Tile.ILLUMINATOR_RED Tile.ILLUMINATOR_RED,
, Tile.ILLUMINATOR_TAN Tile.ILLUMINATOR_TAN,
, Tile.ILLUMINATOR_WHITE Tile.ILLUMINATOR_WHITE,
, Tile.ILLUMINATOR_YELLOW Tile.ILLUMINATOR_YELLOW,
, Tile.ILLUMINATOR_BLACK_OFF Tile.ILLUMINATOR_BLACK_OFF,
, Tile.ILLUMINATOR_BLUE_OFF Tile.ILLUMINATOR_BLUE_OFF,
, Tile.ILLUMINATOR_BROWN_OFF Tile.ILLUMINATOR_BROWN_OFF,
, Tile.ILLUMINATOR_CYAN_OFF Tile.ILLUMINATOR_CYAN_OFF,
, Tile.ILLUMINATOR_FUCHSIA_OFF Tile.ILLUMINATOR_FUCHSIA_OFF,
, Tile.ILLUMINATOR_GREEN_OFF Tile.ILLUMINATOR_GREEN_OFF,
, Tile.ILLUMINATOR_GREEN_DARK_OFF Tile.ILLUMINATOR_GREEN_DARK_OFF,
, Tile.ILLUMINATOR_GREY_DARK_OFF Tile.ILLUMINATOR_GREY_DARK_OFF,
, Tile.ILLUMINATOR_GREY_LIGHT_OFF Tile.ILLUMINATOR_GREY_LIGHT_OFF,
, Tile.ILLUMINATOR_GREY_MED_OFF Tile.ILLUMINATOR_GREY_MED_OFF,
, Tile.ILLUMINATOR_ORANGE_OFF Tile.ILLUMINATOR_ORANGE_OFF,
, Tile.ILLUMINATOR_PURPLE_OFF Tile.ILLUMINATOR_PURPLE_OFF,
, Tile.ILLUMINATOR_RED_OFF Tile.ILLUMINATOR_RED_OFF,
, Tile.ILLUMINATOR_TAN_OFF Tile.ILLUMINATOR_TAN_OFF,
, Tile.ILLUMINATOR_WHITE_OFF Tile.ILLUMINATOR_WHITE_OFF,
, Tile.ILLUMINATOR_YELLOW Tile.ILLUMINATOR_YELLOW,
, Tile.SANDSTONE Tile.SANDSTONE,
, Tile.SANDSTONE_BLACK Tile.SANDSTONE_BLACK,
, Tile.SANDSTONE_DESERT Tile.SANDSTONE_DESERT,
, Tile.SANDSTONE_RED Tile.SANDSTONE_RED,
, Tile.SANDSTONE_WHITE Tile.SANDSTONE_WHITE,
, Tile.SANDSTONE_GREEN Tile.SANDSTONE_GREEN,
, Tile.DAYLIGHT_CAPACITOR Tile.DAYLIGHT_CAPACITOR
) )
/** /**
@@ -113,82 +113,86 @@ object MapCamera {
* It holds different shading rule to discriminate with group 01, index 0 is middle tile. * It holds different shading rule to discriminate with group 01, index 0 is middle tile.
*/ */
val TILES_CONNECT_MUTUAL = arrayOf( val TILES_CONNECT_MUTUAL = arrayOf(
Tile.STONE Tile.STONE,
, Tile.STONE_QUARRIED Tile.STONE_QUARRIED,
, Tile.STONE_TILE_WHITE Tile.STONE_TILE_WHITE,
, Tile.STONE_BRICKS Tile.STONE_BRICKS,
, Tile.DIRT Tile.DIRT,
, Tile.GRASS Tile.GRASS,
, Tile.PLANK_BIRCH Tile.PLANK_BIRCH,
, Tile.PLANK_BLOODROSE Tile.PLANK_BLOODROSE,
, Tile.PLANK_EBONY Tile.PLANK_EBONY,
, Tile.PLANK_NORMAL Tile.PLANK_NORMAL,
, Tile.SAND Tile.SAND,
, Tile.SAND_WHITE Tile.SAND_WHITE,
, Tile.SAND_RED Tile.SAND_RED,
, Tile.SAND_DESERT Tile.SAND_DESERT,
, Tile.SAND_BLACK Tile.SAND_BLACK,
, Tile.SAND_GREEN Tile.SAND_GREEN,
, Tile.GRAVEL Tile.GRAVEL,
, Tile.GRAVEL_GREY Tile.GRAVEL_GREY,
, Tile.SNOW Tile.SNOW,
, Tile.ICE_NATURAL Tile.ICE_NATURAL,
, Tile.ORE_COPPER Tile.ORE_COPPER,
, Tile.ORE_IRON Tile.ORE_IRON,
, Tile.ORE_GOLD Tile.ORE_GOLD,
, Tile.ORE_SILVER Tile.ORE_SILVER,
, Tile.ORE_ILMENITE Tile.ORE_ILMENITE,
, Tile.ORE_AURICHALCUM Tile.ORE_AURICHALCUM,
, Tile.WATER Tile.WATER,
, Tile.WATER_1 Tile.WATER_1,
, Tile.WATER_2 Tile.WATER_2,
, Tile.WATER_3 Tile.WATER_3,
, Tile.WATER_4 Tile.WATER_4,
, Tile.WATER_5 Tile.WATER_5,
, Tile.WATER_6 Tile.WATER_6,
, Tile.WATER_7 Tile.WATER_7,
, Tile.WATER_8 Tile.WATER_8,
, Tile.WATER_9 Tile.WATER_9,
, Tile.WATER_10 Tile.WATER_10,
, Tile.WATER_11 Tile.WATER_11,
, Tile.WATER_12 Tile.WATER_12,
, Tile.WATER_13 Tile.WATER_13,
, Tile.WATER_14 Tile.WATER_14,
, Tile.WATER_15 Tile.WATER_15,
, Tile.LAVA Tile.LAVA,
, Tile.LAVA_1 Tile.LAVA_1,
, Tile.LAVA_2 Tile.LAVA_2,
, Tile.LAVA_3 Tile.LAVA_3,
, Tile.LAVA_4 Tile.LAVA_4,
, Tile.LAVA_5 Tile.LAVA_5,
, Tile.LAVA_6 Tile.LAVA_6,
, Tile.LAVA_7 Tile.LAVA_7,
, Tile.LAVA_8 Tile.LAVA_8,
, Tile.LAVA_9 Tile.LAVA_9,
, Tile.LAVA_10 Tile.LAVA_10,
, Tile.LAVA_11 Tile.LAVA_11,
, Tile.LAVA_12 Tile.LAVA_12,
, Tile.LAVA_13 Tile.LAVA_13,
, Tile.LAVA_14 Tile.LAVA_14,
, Tile.LAVA_15 Tile.LAVA_15
) )
/** /**
* Torches, levers, switches, ... * Torches, levers, switches, ...
*/ */
val TILES_WALL_STICKER = arrayOf( val TILES_WALL_STICKER = arrayOf(
Tile.TORCH Tile.TORCH,
, Tile.TORCH_FROST Tile.TORCH_FROST,
, Tile.TORCH_OFF Tile.TORCH_OFF,
, Tile.TORCH_FROST_OFF Tile.TORCH_FROST_OFF
) )
/** /**
* platforms, ... * platforms, ...
*/ */
val TILES_WALL_STICKER_CONNECT_SELF = arrayOf<Int>( val TILES_WALL_STICKER_CONNECT_SELF = arrayOf(
Tile.PLATFORM_BIRCH,
Tile.PLATFORM_BLOODROSE,
Tile.PLATFORM_EBONY,
Tile.PLATFORM_STONE,
Tile.PLATFORM_WOODEN
) )
/** /**
@@ -197,38 +201,38 @@ object MapCamera {
* i.e. red hues get lost if you dive into the water * i.e. red hues get lost if you dive into the water
*/ */
val TILES_BLEND_MUL = arrayOf( val TILES_BLEND_MUL = arrayOf(
Tile.WATER Tile.WATER,
, Tile.WATER_1 Tile.WATER_1,
, Tile.WATER_2 Tile.WATER_2,
, Tile.WATER_3 Tile.WATER_3,
, Tile.WATER_4 Tile.WATER_4,
, Tile.WATER_5 Tile.WATER_5,
, Tile.WATER_6 Tile.WATER_6,
, Tile.WATER_7 Tile.WATER_7,
, Tile.WATER_8 Tile.WATER_8,
, Tile.WATER_9 Tile.WATER_9,
, Tile.WATER_10 Tile.WATER_10,
, Tile.WATER_11 Tile.WATER_11,
, Tile.WATER_12 Tile.WATER_12,
, Tile.WATER_13 Tile.WATER_13,
, Tile.WATER_14 Tile.WATER_14,
, Tile.WATER_15 Tile.WATER_15,
, Tile.LAVA Tile.LAVA,
, Tile.LAVA_1 Tile.LAVA_1,
, Tile.LAVA_2 Tile.LAVA_2,
, Tile.LAVA_3 Tile.LAVA_3,
, Tile.LAVA_4 Tile.LAVA_4,
, Tile.LAVA_5 Tile.LAVA_5,
, Tile.LAVA_6 Tile.LAVA_6,
, Tile.LAVA_7 Tile.LAVA_7,
, Tile.LAVA_8 Tile.LAVA_8,
, Tile.LAVA_9 Tile.LAVA_9,
, Tile.LAVA_10 Tile.LAVA_10,
, Tile.LAVA_11 Tile.LAVA_11,
, Tile.LAVA_12 Tile.LAVA_12,
, Tile.LAVA_13 Tile.LAVA_13,
, Tile.LAVA_14 Tile.LAVA_14,
, Tile.LAVA_15 Tile.LAVA_15
) )
fun update(gc: GameContainer, delta_t: Int) { fun update(gc: GameContainer, delta_t: Int) {
@@ -238,11 +242,6 @@ object MapCamera {
renderHeight = FastMath.ceil(Terrarum.HEIGHT / Terrarum.ingame.screenZoom) renderHeight = FastMath.ceil(Terrarum.HEIGHT / Terrarum.ingame.screenZoom)
// position - (WH / 2) // position - (WH / 2)
/*cameraX = Math.round(FastMath.clamp(
player.hitbox.centeredX.toFloat() - renderWidth / 2, TILE_SIZE.toFloat(), world.width * TILE_SIZE - renderWidth - TILE_SIZE.toFloat()))
cameraY = Math.round(FastMath.clamp(
player.hitbox.centeredY.toFloat() - renderHeight / 2, TILE_SIZE.toFloat(), world.height * TILE_SIZE - renderHeight - TILE_SIZE.toFloat()))
*/
cameraX = Math.round( // X only: ROUNDWORLD implementation cameraX = Math.round( // X only: ROUNDWORLD implementation
player.hitbox.centeredX.toFloat() - renderWidth / 2) player.hitbox.centeredX.toFloat() - renderWidth / 2)
cameraY = Math.round(FastMath.clamp( cameraY = Math.round(FastMath.clamp(
@@ -313,13 +312,19 @@ object MapCamera {
) { ) {
val nearbyTilesInfo: Int val nearbyTilesInfo: Int
if (MapCamera.isWallSticker(thisTile)) { if (isPlatform(thisTile)) {
nearbyTilesInfo = MapCamera.getNearbyTilesInfoWallSticker(x, y) nearbyTilesInfo = getNearbyTilesInfoPlatform(x, y)
} else if (MapCamera.isConnectMutual(thisTile)) { }
nearbyTilesInfo = MapCamera.getNearbyTilesInfoNonSolid(x, y, mode) else if (isWallSticker(thisTile)) {
} else if (MapCamera.isConnectSelf(thisTile)) { nearbyTilesInfo = getNearbyTilesInfoWallSticker(x, y)
nearbyTilesInfo = MapCamera.getNearbyTilesInfo(x, y, mode, thisTile) }
} else { else if (isConnectMutual(thisTile)) {
nearbyTilesInfo = getNearbyTilesInfoNonSolid(x, y, mode)
}
else if (isConnectSelf(thisTile)) {
nearbyTilesInfo = getNearbyTilesInfo(x, y, mode, thisTile)
}
else {
nearbyTilesInfo = 0 nearbyTilesInfo = 0
} }
@@ -435,6 +440,46 @@ object MapCamera {
} }
} }
fun getNearbyTilesInfoPlatform(x: Int, y: Int): Int {
val nearbyTiles = IntArray(4)
nearbyTiles[NEARBY_TILE_KEY_LEFT] = world.getTileFrom(TERRAIN, x - 1, y) ?: 4096
nearbyTiles[NEARBY_TILE_KEY_RIGHT] = world.getTileFrom(TERRAIN, x + 1, y) ?: 4096
if ((TileCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid &&
TileCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid) ||
isPlatform(nearbyTiles[NEARBY_TILE_KEY_LEFT]) &&
isPlatform(nearbyTiles[NEARBY_TILE_KEY_RIGHT])) // LR solid || LR platform
return 0
else if (TileCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid &&
!isPlatform(nearbyTiles[NEARBY_TILE_KEY_LEFT]) &&
!TileCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid &&
!isPlatform(nearbyTiles[NEARBY_TILE_KEY_RIGHT])) // L solid and not platform && R not solid and not platform
return 4
else if (TileCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid &&
!isPlatform(nearbyTiles[NEARBY_TILE_KEY_RIGHT]) &&
!TileCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid &&
!isPlatform(nearbyTiles[NEARBY_TILE_KEY_LEFT])) // R solid and not platform && L not solid and nto platform
return 6
else if (TileCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid &&
!isPlatform(nearbyTiles[NEARBY_TILE_KEY_LEFT])) // L solid && L not platform
return 3
else if (TileCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid &&
!isPlatform(nearbyTiles[NEARBY_TILE_KEY_RIGHT])) // R solid && R not platform
return 5
else if ((TileCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid ||
isPlatform(nearbyTiles[NEARBY_TILE_KEY_LEFT])) &&
!TileCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid &&
!isPlatform(nearbyTiles[NEARBY_TILE_KEY_RIGHT])) // L solid or platform && R not solid and not platform
return 1
else if ((TileCodex[nearbyTiles[NEARBY_TILE_KEY_RIGHT]].isSolid ||
isPlatform(nearbyTiles[NEARBY_TILE_KEY_RIGHT])) &&
!TileCodex[nearbyTiles[NEARBY_TILE_KEY_LEFT]].isSolid &&
!isPlatform(nearbyTiles[NEARBY_TILE_KEY_LEFT])) // R solid or platform && L not solid and not platform
return 2
else
return 7
}
private fun drawTile(mode: Int, tilewisePosX: Int, tilewisePosY: Int, sheetX: Int, sheetY: Int) { private fun drawTile(mode: Int, tilewisePosX: Int, tilewisePosY: Int, sheetX: Int, sheetY: Int) {
tilesetBook[mode].renderInUse( tilesetBook[mode].renderInUse(
FastMath.floor((tilewisePosX * TILE_SIZE).toFloat()), FastMath.floor((tilewisePosX * TILE_SIZE).toFloat()),

View File

@@ -53,7 +53,7 @@ object TilePropCSV {
"9"; "3";"TILE_ICE_CLEAR_MAGICAL" ; "33587232"; "25";"3720";"icex"; "0"; "1"; "1"; "19955770"; "9"; "3"; "0"; "0"; "8" "9"; "3";"TILE_ICE_CLEAR_MAGICAL" ; "33587232"; "25";"3720";"icex"; "0"; "1"; "1"; "19955770"; "9"; "3"; "0"; "0"; "8"
"9"; "4";"TILE_GLASS_CRUDE" ; "3146755"; "1";"2500";"glas"; "0"; "1"; "1"; "0"; "9"; "4"; "0"; "0";"16" "9"; "4";"TILE_GLASS_CRUDE" ; "3146755"; "1";"2500";"glas"; "0"; "1"; "1"; "0"; "9"; "4"; "0"; "0";"16"
"9"; "5";"TILE_GLASS_CLEAN" ; "1049601"; "1";"2203";"glas"; "0"; "1"; "1"; "0"; "9"; "5"; "0"; "0";"16" "9"; "5";"TILE_GLASS_CLEAN" ; "1049601"; "1";"2203";"glas"; "0"; "1"; "1"; "0"; "9"; "5"; "0"; "0";"16"
"10"; "0";"TILE_PLATFORM_STONE" ; "8396808"; "1"; "N/A";"wood"; "0"; "0"; "0"; "0"; "10"; "0"; "0"; "0";"16" "10"; "0";"TILE_PLATFORM_STONE" ; "8396808"; "1"; "N/A";"rock"; "0"; "0"; "0"; "0"; "10"; "0"; "0"; "0";"16"
"10"; "1";"TILE_PLATFORM_WOODEN" ; "8396808"; "1"; "N/A";"wood"; "0"; "0"; "0"; "0"; "10"; "1"; "0"; "0";"16" "10"; "1";"TILE_PLATFORM_WOODEN" ; "8396808"; "1"; "N/A";"wood"; "0"; "0"; "0"; "0"; "10"; "1"; "0"; "0";"16"
"10"; "2";"TILE_PLATFORM_EBONY" ; "8396808"; "1"; "N/A";"wood"; "0"; "0"; "0"; "0"; "10"; "2"; "0"; "0";"16" "10"; "2";"TILE_PLATFORM_EBONY" ; "8396808"; "1"; "N/A";"wood"; "0"; "0"; "0"; "0"; "10"; "2"; "0"; "0";"16"
"10"; "3";"TILE_PLATFORM_BIRCH" ; "8396808"; "1"; "N/A";"wood"; "0"; "0"; "0"; "0"; "10"; "3"; "0"; "0";"16" "10"; "3";"TILE_PLATFORM_BIRCH" ; "8396808"; "1"; "N/A";"wood"; "0"; "0"; "0"; "0"; "10"; "3"; "0"; "0";"16"