Support for tile damage, increasing available tiles to 4096, has issue on MapCamera where 'nearbyTilesInfo' does not work properly

Former-commit-id: 84b4c7d70604743c3981078c5f53e615be714b0b
Former-commit-id: d8e79628cae968e7636a19e5e36be23a4bf8edd2
This commit is contained in:
Song Minjae
2016-03-06 14:46:29 +09:00
parent b53af23577
commit 4462fc89a6
73 changed files with 602 additions and 516 deletions

View File

@@ -1,49 +1,60 @@
"id";"name" ;"opacity";"strength";"fluid";"viscosity";"solid";"wall";"lumcolor";"opaque";"drop";"fall";"friction" "id";"dmg";"name" ;"opacity";"strength";"fluid";"viscosity";"solid";"wall";"lumcolor";"opaque";"drop";"ddmg";"fall";"friction"
"0";"TILE_AIR" ; "1641"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0";"16" "0"; "0";"TILE_AIR" ; "1641"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0";"16"
"1";"TILE_STONE" ; "8205"; "25"; "0"; "0"; "1"; "1"; "0"; "1"; "1"; "0";"16" "1"; "0";"TILE_STONE" ; "8205"; "25"; "0"; "0"; "1"; "1"; "0"; "1"; "1"; "0"; "0";"16"
"2";"TILE_DIRT" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "2"; "0";"16" "1"; "1";"TILE_STONE_QUARRIED" ; "8205"; "25"; "0"; "0"; "1"; "1"; "0"; "1"; "1"; "1"; "0";"16"
"3";"TILE_GRASS" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "2"; "0";"16" "2"; "0";"TILE_DIRT" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "2"; "0"; "0";"16"
"4";"TILE_PLANK_NORMAL" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "4"; "0";"16" "2"; "1";"TILE_GRASS" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "2"; "1"; "0";"16"
"5";"TILE_PLANK_EBONY" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "0";"16"
"6";"TILE_PLANK_BIRCH" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "6"; "0";"16"
"7";"TILE_PLANK_BLOODROSE" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "7"; "0";"16"
"8";"TILE_TRUNK_NORMAL" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "0";"16"
"9";"TILE_TRUNK_EBONY" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "9"; "0";"16"
"10";"TILE_TRUNK_BIRCH" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "10"; "0";"16"
"11";"TILE_TRUNK_BLOODROSE" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "11"; "0";"16"
"12";"TILE_STONE_QUARRIED" ; "8205"; "25"; "0"; "0"; "1"; "1"; "0"; "1"; "12"; "0";"16"
"13";"TILE_SAND" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "13"; "1";"16"
"14";"TILE_GRAVEL" ; "8205"; "6"; "0"; "0"; "1"; "0"; "0"; "1"; "14"; "1";"16"
"15";"TILE_ORE_MALACHITE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "15"; "0";"16" "3"; "0";"TILE_PLANK_NORMAL" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "0"; "0";"16"
"16";"TILE_ORE_HEMATITE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "16"; "0";"16" "3"; "1";"TILE_PLANK_EBONY" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "1"; "0";"16"
"17";"TILE_ORE_NATURAL_GOLD" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "17"; "0";"16" "3"; "2";"TILE_PLANK_BIRCH" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "2"; "0";"16"
"18";"TILE_ORE_NATURAL_SILVER" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "18"; "0";"16" "3"; "3";"TILE_PLANK_BLOODROSE" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "3"; "0";"16"
"19";"TILE_ORE_RUTILE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "19"; "0";"16"
"20";"TILE_ORE_AURICHALCUMITE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "20"; "0";"16"
"21";"TILE_GEM_RUBY" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "21"; "0";"16"
"22";"TILE_GEM_EMERALD" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "22"; "0";"16"
"23";"TILE_GEM_SAPPHIRE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "23"; "0";"16"
"24";"TILE_GEM_TOPAZ" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "24"; "0";"16"
"25";"TILE_GEM_DIAMOND" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "25"; "0";"16"
"26";"TILE_GEM_AMETHYST" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "26"; "0";"16"
"27";"TILE_SNOW" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "27"; "0";"16" "4"; "0";"TILE_TRUNK_NORMAL" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "0"; "0";"16"
"28";"TILE_ICE_FRAGILE" ; "3282"; "1"; "0"; "0"; "1"; "0"; "0"; "0"; "28"; "0";"16" "4"; "1";"TILE_TRUNK_EBONY" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "1"; "0";"16"
"29";"TILE_ICE_NATURAL" ; "6564"; "25"; "0"; "0"; "1"; "1"; "0"; "1"; "29"; "0"; "8" "4"; "2";"TILE_TRUNK_BIRCH" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "2"; "0";"16"
"30";"TILE_ICE_CLEAR_MAGICAL" ; "8205"; "25"; "0"; "0"; "1"; "1"; "5009"; "0"; "30"; "0"; "8" "4"; "3";"TILE_TRUNK_BLOODROSE" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "3"; "0";"16"
# see scandinavian name set female of this tile id!
"31";"TILE_PLATFORM_STONE" ; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "31"; "0";"16"
"32";"TILE_PLATFORM_WOODEN" ; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "32"; "0";"16"
"33";"TILE_PLATFORM_EBONY" ; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "33"; "0";"16"
"34";"TILE_PLATFORM_BIRCH" ; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "34"; "0";"16"
"35";"TILE_PLATFORM_BLOODROSE" ; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "35"; "0";"16"
"36";"TILE_TORCH" ; "0"; "0"; "0"; "0"; "0"; "0"; "63412"; "0"; "36"; "0";"16" "5"; "0";"TILE_SAND" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "0"; "1";"16"
"5"; "1";"TILE_SAND_WHITE" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "1"; "1";"16"
"5"; "2";"TILE_SAND_RED" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "2"; "1";"16"
"5"; "3";"TILE_SAND" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "3"; "1";"16"
"5"; "4";"TILE_SAND_BLACK" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "4"; "1";"16"
"6"; "0";"TILE_GRAVEL" ; "8205"; "6"; "0"; "0"; "1"; "0"; "0"; "1"; "6"; "0"; "1";"16"
"6"; "1";"TILE_GRAVEL_GREY" ; "8205"; "6"; "0"; "0"; "1"; "0"; "0"; "1"; "6"; "1"; "1";"16"
"7"; "0";"TILE_ORE_MALACHITE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "0"; "0";"16"
"7"; "1";"TILE_ORE_HEMATITE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "1"; "0";"16"
"7"; "2";"TILE_ORE_NATURAL_GOLD" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "2"; "0";"16"
"7"; "3";"TILE_ORE_NATURAL_SILVER" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "3"; "0";"16"
"7"; "4";"TILE_ORE_RUTILE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "4"; "0";"16"
"7"; "5";"TILE_ORE_AURICHALCUMITE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "5"; "0";"16"
"8"; "0";"TILE_GEM_RUBY" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "0"; "0";"16"
"8"; "1";"TILE_GEM_EMERALD" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "1"; "0";"16"
"8"; "2";"TILE_GEM_SAPPHIRE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "2"; "0";"16"
"8"; "3";"TILE_GEM_TOPAZ" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "3"; "0";"16"
"8"; "4";"TILE_GEM_DIAMOND" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "4"; "0";"16"
"8"; "5";"TILE_GEM_AMETHYST" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "5"; "0";"16"
"9"; "0";"TILE_SNOW" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "9"; "0"; "0";"16"
"9"; "1";"TILE_ICE_FRAGILE" ; "3282"; "1"; "0"; "0"; "1"; "0"; "0"; "0"; "9"; "1"; "0";"16"
"9"; "2";"TILE_ICE_NATURAL" ; "6564"; "25"; "0"; "0"; "1"; "1"; "0"; "1"; "9"; "2"; "0"; "8"
"9"; "3";"TILE_ICE_CLEAR_MAGICAL" ; "8205"; "25"; "0"; "0"; "1"; "1"; "5009"; "0"; "9"; "3"; "0"; "8"
"10"; "0";"TILE_PLATFORM_STONE" ; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "0"; "0";"16"
"10"; "1";"TILE_PLATFORM_WOODEN" ; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "1"; "0";"16"
"10"; "2";"TILE_PLATFORM_EBONY" ; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "2"; "0";"16"
"10"; "3";"TILE_PLATFORM_BIRCH" ; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "3"; "0";"16"
"10"; "4";"TILE_PLATFORM_BLOODROSE" ; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "4"; "0";"16"
"11"; "0";"TILE_TORCH" ; "0"; "0"; "0"; "0"; "0"; "0"; "63412"; "0"; "11"; "0"; "0";"16"
# 63412 (ffa44e) : real candlelight colour taken from properly configured camera. # 63412 (ffa44e) : real candlelight colour taken from properly configured camera.
"239";"TILE_WATER" ; "6522"; "100"; "1"; "16"; "0"; "0"; "0"; "0"; "239"; "0";"16" "254"; "15";"TILE_WATER" ; "6522"; "100"; "1"; "16"; "0"; "0"; "0"; "0"; "-1"; "-1"; "0";"16"
"255";"TILE_LAVA" ; "62358"; "100"; "1"; "16"; "0"; "0"; "48320"; "0"; "239"; "0";"16" "255"; "15";"TILE_LAVA" ; "62358"; "100"; "1"; "16"; "0"; "0"; "48320"; "0"; "-1"; "-1"; "0";"16"
# Friction: 0: frictionless, <16: slippery, 16: regular, >16: sticky # Friction: 0: frictionless, <16: slippery, 16: regular, >16: sticky
# Opacity/Lumcolor: 40-step RGB # Opacity/Lumcolor: 40-step RGB
# Opaque: whether the tile completely hides wall behind # Opaque: whether the tile completely hides wall behind
# Solid: whether the tile has collision
# Viscosity: (walkspeedmax) * (1 + (n/16)) # Viscosity: (walkspeedmax) * (1 + (n/16))
Can't render this file because it contains an unexpected character in line 1 and column 12.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 785 B

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 331 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 183 KiB

View File

@@ -110,11 +110,24 @@ public class GameFontBase implements Font {
return hanIndex % JONG_COUNT; return hanIndex % JONG_COUNT;
} }
private int getHanChosungShift(int hanIndex) { private int getHanChoseongShift(int hanIndex) {
int jungseongIndex = getHanJungseong(hanIndex); int jungseongIndex = getHanJungseong(hanIndex);
Integer[] jungseongWide = {8, 12, 13, 17, 18, 21}; Integer[] jungseongWide = {8, 12, 13, 17, 18, 21};
return (Arrays.asList(jungseongWide).contains(jungseongIndex))
? 1 : 0; if (getHanJongseong(hanIndex) != 0)
return (Arrays.asList(jungseongWide).contains(jungseongIndex))
? 1 : 0;
else
return (Arrays.asList(jungseongWide).contains(jungseongIndex))
? 1 : 0;
}
private int getHanJungseongShift(int hanIndex) {
return (getHanJongseong(hanIndex) == 0) ? 4 : 5;
}
private int getHanJongseongShift() {
return 6;
} }
private boolean isAsciiEF(char c) { private boolean isAsciiEF(char c) {
@@ -336,9 +349,9 @@ public class GameFontBase implements Font {
int indexJung = getHanJungseong(hIndex); int indexJung = getHanJungseong(hIndex);
int indexJong = getHanJongseong(hIndex); int indexJong = getHanJongseong(hIndex);
int choRow = getHanChosungShift(hIndex); int choRow = getHanChoseongShift(hIndex);
int jungRow = 2; int jungRow = getHanJungseongShift(hIndex);
int jongRow = 3; int jongRow = getHanJongseongShift();
int glyphW = getWidth("" + ch); int glyphW = getWidth("" + ch);

View File

@@ -1,13 +1,11 @@
package com.Torvald.Terrarum.Actors; package com.Torvald.Terrarum.Actors;
import com.Torvald.Rand.HQRNG; import com.Torvald.Rand.HQRNG;
import com.Torvald.Terrarum.*;
import com.Torvald.Terrarum.MapDrawer.MapDrawer; import com.Torvald.Terrarum.MapDrawer.MapDrawer;
import com.Torvald.Terrarum.Terrarum;
import com.Torvald.Terrarum.TileProperties.TilePropCodex; import com.Torvald.Terrarum.TileProperties.TilePropCodex;
import com.Torvald.spriteAnimation.SpriteAnimation; import com.Torvald.spriteAnimation.SpriteAnimation;
import com.jme3.math.FastMath; import com.jme3.math.FastMath;
import com.sun.istack.internal.NotNull;
import com.sun.istack.internal.Nullable;
import org.newdawn.slick.GameContainer; import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics; import org.newdawn.slick.Graphics;
@@ -20,7 +18,8 @@ public class ActorWithBody implements Actor, Visible, Glowing {
ActorInventory inventory; ActorInventory inventory;
private @NotNull float hitboxTranslateX; // relative to spritePosX private @NotNull
float hitboxTranslateX; // relative to spritePosX
private @NotNull float hitboxTranslateY; // relative to spritePosY private @NotNull float hitboxTranslateY; // relative to spritePosY
private @NotNull int baseHitboxW; private @NotNull int baseHitboxW;
private @NotNull int baseHitboxH; private @NotNull int baseHitboxH;
@@ -38,12 +37,18 @@ public class ActorWithBody implements Actor, Visible, Glowing {
boolean grounded = false; boolean grounded = false;
@Nullable
SpriteAnimation sprite; SpriteAnimation sprite;
@Nullable SpriteAnimation spriteGlow; @Nullable SpriteAnimation spriteGlow;
/** Default to 'false' */
private boolean visible = false; private boolean visible = false;
/** Default to 'true' */
private boolean update = true; private boolean update = true;
@NotNull int baseSpriteWidth, baseSpriteHeight; private boolean noSubjectToGrav = false;
private boolean noCollideWorld = false;
int baseSpriteWidth, baseSpriteHeight;
/** /**
* Positions: top-left point * Positions: top-left point
@@ -53,9 +58,15 @@ public class ActorWithBody implements Actor, Visible, Glowing {
/** /**
* Physical properties * Physical properties
*/ */
@NonZero
private volatile float scale = 1; private volatile float scale = 1;
private volatile float mass = 1f; @NonZero private volatile float mass = 2f;
private final float MASS_LOWEST = 2f; private final float MASS_LOWEST = 2f;
/** Valid range: [0, 1] */
private float elasticity = 0;
private final float ELASTICITY_MAX = 0.993f;
@NoNegative
private float buoyancy = 0;
private static final int TSIZE = MapDrawer.TILE_SIZE; private static final int TSIZE = MapDrawer.TILE_SIZE;
private static int AUTO_CLIMB_RATE = TSIZE / 8; private static int AUTO_CLIMB_RATE = TSIZE / 8;
@@ -162,13 +173,20 @@ public class ActorWithBody implements Actor, Visible, Glowing {
/** /**
* Update variables * Update variables
*/ */
if (this instanceof Player) {
noSubjectToGrav = isPlayerNoClip();
noCollideWorld = isPlayerNoClip();
}
if (mass < MASS_LOWEST) mass = MASS_LOWEST; // clamp to minimum possible mass if (mass < MASS_LOWEST) mass = MASS_LOWEST; // clamp to minimum possible mass
baseSpriteHeight = sprite.getHeight(); if (sprite != null) {
baseSpriteWidth = sprite.getWidth(); baseSpriteHeight = sprite.getHeight();
baseSpriteWidth = sprite.getWidth();
}
gravitation = Terrarum.game.map.getGravitation(); gravitation = Terrarum.game.map.getGravitation();
AUTO_CLIMB_RATE = (int) Math.min(TSIZE / 8 * FastMath.sqrt(scale), TSIZE); AUTO_CLIMB_RATE = (int) Math.min(TSIZE / 8 * FastMath.sqrt(scale), TSIZE);
if (!isPlayerNoClip()) { if (!isNoSubjectToGrav()) {
applyGravitation(); applyGravitation();
} }
@@ -226,17 +244,17 @@ public class ActorWithBody implements Actor, Visible, Glowing {
} }
private void updateVerticalPos() { private void updateVerticalPos() {
if (!isPlayerNoClip()) { if (!isNoCollideWorld()) {
// check downward // check downward
if (veloY >= 0) { if (veloY >= 0) {
// order of the if-elseif chain is IMPORTANT // order of the if-elseif chain is IMPORTANT
if (isColliding(CONTACT_AREA_BOTTOM)) { if (isColliding(CONTACT_AREA_BOTTOM)) {
adjustHitBottom(); adjustHitBottom();
veloY = 0; if (veloY != 0) veloY = -veloY * elasticity;
grounded = true; grounded = true;
} }
else if (isColliding(CONTACT_AREA_BOTTOM, 0, 1)) { else if (isColliding(CONTACT_AREA_BOTTOM, 0, 1)) {
veloY = 0; if (veloY != 0) veloY = -veloY * elasticity;
grounded = true; grounded = true;
} }
else { else {
@@ -249,10 +267,10 @@ public class ActorWithBody implements Actor, Visible, Glowing {
// order of the if-elseif chain is IMPORTANT // order of the if-elseif chain is IMPORTANT
if (isColliding(CONTACT_AREA_TOP)) { if (isColliding(CONTACT_AREA_TOP)) {
adjustHitTop(); adjustHitTop();
veloY = 0; if (veloY != 0) veloY = -veloY * elasticity;
} }
else if (isColliding(CONTACT_AREA_TOP, 0, -1)) { else if (isColliding(CONTACT_AREA_TOP, 0, -1)) {
veloY = 0; // for reversed gravity if (veloY != 0) veloY = -veloY * elasticity; // for reversed gravity
} }
else { else {
} }
@@ -295,17 +313,17 @@ public class ActorWithBody implements Actor, Visible, Glowing {
} }
private void updateHorizontalPos() { private void updateHorizontalPos() {
if (!isPlayerNoClip()) { if (!isNoCollideWorld()) {
// check right // check right
if (veloX > 0) { if (veloX > 0) {
// order of the if-elseif chain is IMPORTANT // order of the if-elseif chain is IMPORTANT
if (isColliding(CONTACT_AREA_RIGHT) && !isColliding(CONTACT_AREA_LEFT)) { if (isColliding(CONTACT_AREA_RIGHT) && !isColliding(CONTACT_AREA_LEFT)) {
adjustHitRight(); adjustHitRight();
veloX = 0; if (veloX != 0) veloX = -veloX * elasticity;
} }
else if (isColliding(CONTACT_AREA_RIGHT, 1, 0) else if (isColliding(CONTACT_AREA_RIGHT, 1, 0)
&& !isColliding(CONTACT_AREA_LEFT, -1, 0)) { && !isColliding(CONTACT_AREA_LEFT, -1, 0)) {
veloX = 0; if (veloX != 0) veloX = -veloX * elasticity;
} }
else { else {
} }
@@ -314,11 +332,11 @@ public class ActorWithBody implements Actor, Visible, Glowing {
// order of the if-elseif chain is IMPORTANT // order of the if-elseif chain is IMPORTANT
if (isColliding(CONTACT_AREA_LEFT) && !isColliding(CONTACT_AREA_RIGHT)) { if (isColliding(CONTACT_AREA_LEFT) && !isColliding(CONTACT_AREA_RIGHT)) {
adjustHitLeft(); adjustHitLeft();
veloX = 0; if (veloX != 0) veloX = -veloX * elasticity;
} }
else if (isColliding(CONTACT_AREA_LEFT, -1, 0) else if (isColliding(CONTACT_AREA_LEFT, -1, 0)
&& !isColliding(CONTACT_AREA_RIGHT, 1, 0)) { && !isColliding(CONTACT_AREA_RIGHT, 1, 0)) {
veloX = 0; if (veloX != 0) veloX = -veloX * elasticity;
} }
else { else {
} }
@@ -511,7 +529,7 @@ public class ActorWithBody implements Actor, Visible, Glowing {
@Override @Override
public void drawBody(GameContainer gc, Graphics g) { public void drawBody(GameContainer gc, Graphics g) {
if (visible) { if (visible && sprite != null) {
if (!sprite.flippedHorizontal()) { if (!sprite.flippedHorizontal()) {
sprite.render(g sprite.render(g
, (hitbox.getPosX() - (hitboxTranslateX * scale)) , (hitbox.getPosX() - (hitboxTranslateX * scale))
@@ -535,14 +553,12 @@ public class ActorWithBody implements Actor, Visible, Glowing {
@Override @Override
public void updateGlowSprite(GameContainer gc, int delta_t) { public void updateGlowSprite(GameContainer gc, int delta_t) {
if (spriteGlow != null) { if (spriteGlow != null) spriteGlow.update(delta_t);
spriteGlow.update(delta_t);
}
} }
@Override @Override
public void updateBodySprite(GameContainer gc, int delta_t) { public void updateBodySprite(GameContainer gc, int delta_t) {
sprite.update(delta_t); if (sprite != null) sprite.update(delta_t);
} }
@Override @Override
@@ -718,6 +734,40 @@ public class ActorWithBody implements Actor, Visible, Glowing {
private int quantiseTSize(float v) { private int quantiseTSize(float v) {
return FastMath.floor(v / TSIZE) * TSIZE; return FastMath.floor(v / TSIZE) * TSIZE;
} }
public boolean isNoSubjectToGrav() {
return noSubjectToGrav;
}
public void setNoSubjectToGrav(boolean noSubjectToGrav) {
this.noSubjectToGrav = noSubjectToGrav;
}
public boolean isNoCollideWorld() {
return noCollideWorld;
}
public void setNoCollideWorld(boolean noCollideWorld) {
this.noCollideWorld = noCollideWorld;
}
public void setElasticity(float elasticity) {
if (elasticity < 0)
throw new IllegalArgumentException("[ActorWithBody] " + elasticity + ": valid elasticity value is [0, 1].");
if (elasticity > 1) {
System.out.println("[ActorWithBody] Elasticity were capped to 1.");
this.elasticity = ELASTICITY_MAX;
}
else this.elasticity = elasticity * ELASTICITY_MAX;
}
public void setBuoyancy(float buoyancy) {
if (buoyancy < 0)
throw new IllegalArgumentException("[ActorWithBody] " + buoyancy + ": buoyancy cannot be negative.");
this.buoyancy = buoyancy;
}
} }
/** /**

View File

@@ -0,0 +1,29 @@
package com.Torvald.Terrarum.Actors;
import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
/**
* Created by minjaesong on 16-03-05.
*/
public class PhysTestBall extends ActorWithBody {
public PhysTestBall() {
super();
setHitboxDimension(16, 16, 0, 0);
setVisible(true);
setMass(10f);
}
@Override
public void drawBody(GameContainer gc, Graphics g) {
g.setColor(Color.orange);
g.fillOval(
getHitbox().getPosX()
, getHitbox().getPosY()
, getHitbox().getWidth()
, getHitbox().getHeight()
);
}
}

View File

@@ -61,6 +61,8 @@ public class Player extends ActorWithBody implements Controllable, Pocketed, Fac
private HashSet<Faction> factionSet = new HashSet<>(); private HashSet<Faction> factionSet = new HashSet<>();
private final float BASE_BUOYANCY = 0.98f;
/** /**
* Creates new Player instance with empty elements (sprites, actorvalue, etc.). <br /> * Creates new Player instance with empty elements (sprites, actorvalue, etc.). <br />
@@ -73,6 +75,7 @@ public class Player extends ActorWithBody implements Controllable, Pocketed, Fac
super(); super();
referenceID = PLAYER_REF_ID; referenceID = PLAYER_REF_ID;
setVisible(true); setVisible(true);
super.setBuoyancy(BASE_BUOYANCY);
} }
@Override @Override

View File

@@ -33,6 +33,7 @@ public class CommandDict {
dict.put("setgl", new SetGlobalLightLevel()); dict.put("setgl", new SetGlobalLightLevel());
dict.put("getfaction", new GetFactioning()); dict.put("getfaction", new GetFactioning());
dict.put("auth", Terrarum.game.auth); dict.put("auth", Terrarum.game.auth);
dict.put("spawnball", new SpawnPhysTestBall());
} }
public static ConsoleCommand getCommand(String commandName) { public static ConsoleCommand getCommand(String commandName) {

View File

@@ -0,0 +1,37 @@
package com.Torvald.Terrarum.ConsoleCommand;
import com.Torvald.Terrarum.Actors.Actor;
import com.Torvald.Terrarum.Actors.ActorWithBody;
import com.Torvald.Terrarum.Actors.PhysTestBall;
import com.Torvald.Terrarum.MapDrawer.MapCamera;
import com.Torvald.Terrarum.Terrarum;
/**
* Created by minjaesong on 16-03-05.
*/
public class SpawnPhysTestBall implements ConsoleCommand {
@Override
public void execute(String[] args) throws Exception {
if (args.length == 2) {
int mouseX = Terrarum.appgc.getInput().getMouseX();
int mouseY = Terrarum.appgc.getInput().getMouseY();
float elasticity = new Float(args[1]);
ActorWithBody ball = new PhysTestBall();
ball.setPosition(mouseX + MapCamera.getCameraX()
, mouseY + MapCamera.getCameraY());
ball.setElasticity(elasticity);
Terrarum.game.addActor(ball);
}
else {
printUsage();
}
}
@Override
public void printUsage() {
new Echo().execute("usage: spawnball [elasticity]");
}
}

View File

@@ -15,7 +15,6 @@ import com.Torvald.Terrarum.MapGenerator.MapGenerator;
import com.Torvald.Terrarum.TileProperties.TilePropCodex; import com.Torvald.Terrarum.TileProperties.TilePropCodex;
import com.Torvald.Terrarum.TileStat.TileStat; import com.Torvald.Terrarum.TileStat.TileStat;
import com.Torvald.Terrarum.UserInterface.*; import com.Torvald.Terrarum.UserInterface.*;
import com.sun.istack.internal.NotNull;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import org.newdawn.slick.*; import org.newdawn.slick.*;
import org.newdawn.slick.Graphics; import org.newdawn.slick.Graphics;
@@ -26,7 +25,7 @@ import org.newdawn.slick.state.StateBasedGame;
import shader.Shader; import shader.Shader;
import java.lang.management.ManagementFactory; import java.lang.management.ManagementFactory;
import java.util.LinkedList; import java.util.HashSet;
/** /**
* Created by minjaesong on 15-12-30. * Created by minjaesong on 15-12-30.
@@ -41,15 +40,14 @@ public class Game extends BasicGameState {
public GameMap map; public GameMap map;
public LinkedList<Actor> actorContainer = new LinkedList<>(); public HashSet<Actor> actorContainer = new HashSet<>();
public LinkedList<UIHandler> uiContainer = new LinkedList<>(); public HashSet<UIHandler> uiContainer = new HashSet<>();
public UIHandler consoleHandler; public UIHandler consoleHandler;
public UIHandler debugWindow; public UIHandler debugWindow;
public UIHandler bulletin; public UIHandler bulletin;
@NotNull @NotNull Player player;
Player player;
private Image GRADIENT_IMAGE; private Image GRADIENT_IMAGE;
private Rectangle skyBox; private Rectangle skyBox;
@@ -141,7 +139,6 @@ public class Game extends BasicGameState {
setAppTitle(); setAppTitle();
GameController.processInput(gc.getInput()); GameController.processInput(gc.getInput());
KeyToggler.update(gc);
TileStat.update(); TileStat.update();
@@ -164,7 +161,7 @@ public class Game extends BasicGameState {
//bulletin.update(gc, delta_t); //bulletin.update(gc, delta_t);
Terrarum.appgc.setVSync(Terrarum.appgc.getFPS() >= 59); Terrarum.appgc.setVSync(Terrarum.appgc.getFPS() >= Terrarum.VSYNC_TRIGGER_THRESHOLD);
} }
private void setAppTitle() { private void setAppTitle() {
@@ -220,6 +217,14 @@ public class Game extends BasicGameState {
GL11.glEnd(); GL11.glEnd();
} }
public boolean addActor(Actor e) {
return actorContainer.add(e);
}
public boolean removeActor(Actor e) {
return actorContainer.remove(e);
}
private Color[] getGradientColour(int timeSec) { private Color[] getGradientColour(int timeSec) {
Color[] colourTable = new Color[2]; Color[] colourTable = new Color[2];

View File

@@ -32,6 +32,9 @@ public class GameController {
/ MapDrawer.TILE_SIZE); / MapDrawer.TILE_SIZE);
KeyToggler.update(input);
if (!Terrarum.game.consoleHandler.isTakingControl()) { if (!Terrarum.game.consoleHandler.isTakingControl()) {
if (Terrarum.game.getPlayer().vehicleRiding != null) { if (Terrarum.game.getPlayer().vehicleRiding != null) {
Terrarum.game.getPlayer().vehicleRiding.processInput(input); Terrarum.game.getPlayer().vehicleRiding.processInput(input);

View File

@@ -13,10 +13,7 @@ public class KeyToggler {
return currentState[key]; return currentState[key];
} }
public static void update(GameContainer gc){ public static void update(Input input){
Input input = gc.getInput();
for (int i = 0; i < 256; i++) { for (int i = 0; i < 256; i++) {
if (input.isKeyDown(i)) { if (input.isKeyDown(i)) {
isPressed[i] = true; isPressed[i] = true;

View File

@@ -23,6 +23,7 @@ public class GameMap {
private volatile MapLayer layerWall; private volatile MapLayer layerWall;
private volatile MapLayer layerTerrain; private volatile MapLayer layerTerrain;
private volatile MapLayer layerWire; private volatile MapLayer layerWire;
private volatile PairedMapLayer wallDamageCode;
private volatile PairedMapLayer terrainDamageCode; private volatile PairedMapLayer terrainDamageCode;
//properties //properties
@@ -56,6 +57,7 @@ public class GameMap {
layerWall = new MapLayer(width, height); layerWall = new MapLayer(width, height);
layerWire = new MapLayer(width, height); layerWire = new MapLayer(width, height);
terrainDamageCode = new PairedMapLayer(width, height); terrainDamageCode = new PairedMapLayer(width, height);
wallDamageCode = new PairedMapLayer(width, height);
globalLight = (char) 63999; globalLight = (char) 63999;
worldTime = new WorldTime(); worldTime = new WorldTime();
@@ -122,28 +124,62 @@ public class GameMap {
return terrainDamageCode; return terrainDamageCode;
} }
public PairedMapLayer getWallDamageCode() {
return wallDamageCode;
}
public int getTileFromWall(int x, int y) { public int getTileFromWall(int x, int y) {
return uint8ToInt32(layerWall.data[y][x]); return layerWall.getTile(x, y) * PairedMapLayer.RANGE + getWallDamage(x, y);
} }
public int getTileFromTerrain(int x, int y) { public int getTileFromTerrain(int x, int y) {
return uint8ToInt32(layerTerrain.data[y][x]); return layerTerrain.getTile(x, y) * PairedMapLayer.RANGE + getTerrainDamage(x, y);
} }
public int getTileFromWire(int x, int y) { public int getTileFromWire(int x, int y) {
return uint8ToInt32(layerWire.data[y][x]); return layerWire.getTile(x, y);
} }
public int getDamageData(int x, int y) { public int getWallDamage(int x, int y) {
return wallDamageCode.getData(x, y);
}
public int getTerrainDamage(int x, int y) {
return terrainDamageCode.getData(x, y); return terrainDamageCode.getData(x, y);
} }
public void setTileWall(int x, int y, byte tile) { /**
layerWall.data[y][x] = tile; * Set the tile of wall as specified, with damage value of zero.
* @param x
* @param y
* @param combinedTilenum (tilenum * 16) + damage
*/
public void setTileWall(int x, int y, int combinedTilenum) {
setTileWall(x, y
, (byte) (combinedTilenum / PairedMapLayer.RANGE)
, combinedTilenum % PairedMapLayer.RANGE);
} }
public void setTileTerrain(int x, int y, byte tile) { /**
layerTerrain.data[y][x] = tile; * Set the tile of wall as specified, with damage value of zero.
* @param x
* @param y
* @param combinedTilenum (tilenum * 16) + damage
*/
public void setTileTerrain(int x, int y, int combinedTilenum) {
setTileTerrain(x, y
, (byte) (combinedTilenum / PairedMapLayer.RANGE)
, combinedTilenum % PairedMapLayer.RANGE);
}
public void setTileWall(int x, int y, byte tile, int damage) {
layerWall.setTile(x, y, tile);
wallDamageCode.setData(x, y, damage);
}
public void setTileTerrain(int x, int y, byte tile, int damage) {
layerTerrain.setTile(x, y, tile);
terrainDamageCode.setData(x, y, damage);
} }
public void setTileWire(int x, int y, byte tile) { public void setTileWire(int x, int y, byte tile) {

View File

@@ -36,7 +36,7 @@ public class MapLayer implements Iterable<Byte> {
*/ */
@Override @Override
public Iterator<Byte> iterator() { public Iterator<Byte> iterator() {
Iterator<Byte> it = new Iterator<Byte>() { return new Iterator<Byte>() {
private int iteratorCount = 0; private int iteratorCount = 0;
@@ -55,8 +55,6 @@ public class MapLayer implements Iterable<Byte> {
return data[y][x]; return data[y][x];
} }
}; };
return it;
} }
/** /**
@@ -105,11 +103,11 @@ public class MapLayer implements Iterable<Byte> {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
public int getTile(int x, int y) { int getTile(int x, int y) {
return uint8ToInt32(data[y][x]); return uint8ToInt32(data[y][x]);
} }
public void setTile(int x, int y, byte tile) { void setTile(int x, int y, byte tile) {
data[y][x] = tile; data[y][x] = tile;
} }

View File

@@ -22,7 +22,7 @@ public class PairedMapLayer implements Iterable<Integer> {
public int width; public int width;
public int height; public int height;
public static final int MAX_VALUE = 16; public static final int RANGE = 16;
public PairedMapLayer(int width, int height) { public PairedMapLayer(int width, int height) {
this.width = width / 2; this.width = width / 2;
@@ -44,7 +44,7 @@ public class PairedMapLayer implements Iterable<Integer> {
*/ */
@Override @Override
public Iterator<Integer> iterator() { public Iterator<Integer> iterator() {
Iterator<Integer> it = new Iterator<Integer>() { return new Iterator<Integer>() {
private int iteratorCount = 0; private int iteratorCount = 0;
@@ -63,8 +63,6 @@ public class PairedMapLayer implements Iterable<Integer> {
return getData(x, y); return getData(x, y);
} }
}; };
return it;
} }
/** /**
@@ -85,7 +83,7 @@ public class PairedMapLayer implements Iterable<Integer> {
* @since 1.8 * @since 1.8
*/ */
@Override @Override
public void forEach(Consumer<? super Integer> action) { public void forEach(Consumer action) {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
@@ -111,7 +109,7 @@ public class PairedMapLayer implements Iterable<Integer> {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
public int getData(int x, int y) { int getData(int x, int y) {
if ((x & 0x1) == 0) if ((x & 0x1) == 0)
// higher four bits for i = 0, 2, 4, ... // higher four bits for i = 0, 2, 4, ...
return (dataPair[y][x / 2] & 0xF0) >>> 4; return (dataPair[y][x / 2] & 0xF0) >>> 4;
@@ -119,4 +117,14 @@ public class PairedMapLayer implements Iterable<Integer> {
// lower four bits for i = 1, 3, 5, ... // lower four bits for i = 1, 3, 5, ...
return dataPair[y][x / 2] & 0x0F; return dataPair[y][x / 2] & 0x0F;
} }
void setData(int x, int y, int data) {
if (data < 0 || data >= 16) throw new IllegalArgumentException("[PairedMapLayer] " + data + ": invalid data value.");
if ((x & 0x1) == 0)
// higher four bits for i = 0, 2, 4, ...
dataPair[y][x / 2] = (byte) (dataPair[y][x / 2] & 0x0F | (data & 0xF) << 4);
else
// lower four bits for i = 1, 3, 5, ...
dataPair[y][x / 2] = (byte) (dataPair[y][x / 2] & 0xF0 | (data & 0xF));
}
} }

View File

@@ -4,6 +4,8 @@ import com.Torvald.Terrarum.*;
import com.Torvald.Terrarum.Actors.Player; import com.Torvald.Terrarum.Actors.Player;
import com.Torvald.Terrarum.GameMap.GameMap; import com.Torvald.Terrarum.GameMap.GameMap;
import com.Torvald.Terrarum.GameMap.MapLayer; import com.Torvald.Terrarum.GameMap.MapLayer;
import com.Torvald.Terrarum.GameMap.PairedMapLayer;
import com.Torvald.Terrarum.TileProperties.TileNameCode;
import com.Torvald.Terrarum.TileProperties.TilePropCodex; import com.Torvald.Terrarum.TileProperties.TilePropCodex;
import com.jme3.math.FastMath; import com.jme3.math.FastMath;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
@@ -47,49 +49,26 @@ public class MapCamera {
private static final int NEARBY_TILE_CODE_DOWN = 0b0100; private static final int NEARBY_TILE_CODE_DOWN = 0b0100;
private static final int NEARBY_TILE_CODE_LEFT = 0b1000; private static final int NEARBY_TILE_CODE_LEFT = 0b1000;
private static final byte AIR = 0; private static Integer[] TILES_CONNECT_SELF = {
TileNameCode.ORE_COPPER
private static final byte STONE = 1; , TileNameCode.ORE_IRON
private static final byte DIRT = 2; , TileNameCode.ORE_GOLD
private static final byte GRASS = 3; , TileNameCode.ORE_SILVER
, TileNameCode.ORE_ILMENITE
private static final byte SAND = 13; , TileNameCode.ORE_AURICHALCUM
private static final byte GRAVEL = 14; , TileNameCode.ICE_MAGICAL
private static final byte COPPER = 15;
private static final byte IRON = 16;
private static final byte GOLD = 17;
private static final byte SILVER = 18;
private static final byte ILMENITE = 19;
private static final byte AURICHALCUM = 20;
private static final byte SNOW = 27;
private static final byte ICE_FRAGILE = 28;
private static final byte ICE_NATURAL = 29;
private static final byte ICE_MAGICAL = 30;
private static Byte[] TILES_CONNECT_SELF = {
COPPER
, IRON
, GOLD
, SILVER
, ILMENITE
, AURICHALCUM
, ICE_MAGICAL
}; };
private static Byte[] TILES_DARKEN_AIR = { private static Integer[] TILES_DARKEN_AIR = {
STONE TileNameCode.STONE
, DIRT , TileNameCode.DIRT
, GRASS , TileNameCode.GRASS
, SAND , TileNameCode.SAND
, GRAVEL , TileNameCode.GRAVEL
, SNOW , TileNameCode.SNOW
, ICE_NATURAL , TileNameCode.ICE_NATURAL
, (byte)224, (byte)225, (byte)226, (byte)227, (byte)228, (byte)229, (byte)230, (byte)231 , TileNameCode.WATER
, (byte)232, (byte)233, (byte)234, (byte)235, (byte)236, (byte)237, (byte)238, (byte)239 , TileNameCode.LAVA
, (byte)240, (byte)241, (byte)242, (byte)243, (byte)244, (byte)245, (byte)246, (byte)247
, (byte)248, (byte)249, (byte)250, (byte)251, (byte)252, (byte)253, (byte)254, (byte)255
}; };
/** /**
@@ -170,10 +149,6 @@ public class MapCamera {
int for_y_end = clampHTile(for_y_start + div16(renderHeight) + 2); int for_y_end = clampHTile(for_y_start + div16(renderHeight) + 2);
int for_x_end = clampWTile(for_x_start + div16(renderWidth) + 2); int for_x_end = clampWTile(for_x_start + div16(renderWidth) + 2);
MapLayer currentLayer = (mode % 3 == WALL) ? map.getLayerWall()
: (mode % 3 == TERRAIN) ? map.getLayerTerrain()
: map.getLayerWire();
// initialise // initialise
tilesetBook[mode].startUse(); tilesetBook[mode].startUse();
@@ -181,8 +156,13 @@ public class MapCamera {
for (int y = for_y_start; y < for_y_end; y++) { for (int y = for_y_start; y < for_y_end; y++) {
for (int x = for_x_start; x < for_x_end; x++) { for (int x = for_x_start; x < for_x_end; x++) {
int thisTile = currentLayer.getTile(x, y); int thisTile;
int thisTerrainTile = map.getTileFromTerrain(x, y); if (mode % 3 == WALL) thisTile = map.getTileFromWall(x, y);
else if (mode % 3 == TERRAIN) thisTile = map.getTileFromTerrain(x, y);
else if (mode % 3 == WIRE) thisTile = map.getTileFromWire(x, y);
else throw new IllegalArgumentException();
boolean noDamageLayer = (mode % 3 == WIRE);
// draw // draw
try { try {
@@ -210,17 +190,10 @@ public class MapCamera {
))) { ))) {
int nearbyTilesInfo; int nearbyTilesInfo;
//if (thisTile == DIRT) { if (isDarkenAir(thisTile)) {
// nearbyTilesInfo = getGrassInfo(x, y, GRASS); nearbyTilesInfo = getNearbyTilesInfo(x, y, mode, TileNameCode.AIR);
//}
//else {
// nearbyTilesInfo = getNearbyTilesInfo(x, y, AIR);
//}
if (isDarkenAir((byte) thisTile)) {
nearbyTilesInfo = getNearbyTilesInfo(x, y, mode, AIR);
} }
else if (isConnectSelf((byte) thisTile)) { else if (isConnectSelf(thisTile)) {
nearbyTilesInfo = getNearbyTilesInfo(x, y, mode, thisTile); nearbyTilesInfo = getNearbyTilesInfo(x, y, mode, thisTile);
} }
else { else {
@@ -228,8 +201,14 @@ public class MapCamera {
} }
int thisTileX = nearbyTilesInfo; int thisTileX;
int thisTileY = thisTile; if (!noDamageLayer)
thisTileX = PairedMapLayer.RANGE * (thisTile % PairedMapLayer.RANGE)
+ nearbyTilesInfo;
else
thisTileX = nearbyTilesInfo;
int thisTileY = thisTile / PairedMapLayer.RANGE;
if (drawModeTilesBlendMul) { if (drawModeTilesBlendMul) {
if (isBlendMul((byte) thisTile)) { if (isBlendMul((byte) thisTile)) {
@@ -266,16 +245,16 @@ public class MapCamera {
*/ */
private static int getNearbyTilesInfo(int x, int y, int mode, int mark) { private static int getNearbyTilesInfo(int x, int y, int mode, int mark) {
int[] nearbyTiles = new int[4]; int[] nearbyTiles = new int[4];
if (x == 0) { nearbyTiles[NEARBY_TILE_KEY_LEFT] = 0xFF; } if (x == 0) { nearbyTiles[NEARBY_TILE_KEY_LEFT] = 4096; }
else { nearbyTiles[NEARBY_TILE_KEY_LEFT] = map.getTileFrom(mode, x - 1, y); } else { nearbyTiles[NEARBY_TILE_KEY_LEFT] = map.getTileFrom(mode, x - 1, y); }
if (x == map.width - 1) { nearbyTiles[NEARBY_TILE_KEY_RIGHT] = 0xFF; } if (x == map.width - 1) { nearbyTiles[NEARBY_TILE_KEY_RIGHT] = 4096; }
else { nearbyTiles[NEARBY_TILE_KEY_RIGHT] = map.getTileFrom(mode, x + 1, y); } else { nearbyTiles[NEARBY_TILE_KEY_RIGHT] = map.getTileFrom(mode, x + 1, y); }
if (y == 0) { nearbyTiles[NEARBY_TILE_KEY_UP] = 0; } if (y == 0) { nearbyTiles[NEARBY_TILE_KEY_UP] = 0; }
else { nearbyTiles[NEARBY_TILE_KEY_UP] = map.getTileFrom(mode, x, y - 1); } else { nearbyTiles[NEARBY_TILE_KEY_UP] = map.getTileFrom(mode, x, y - 1); }
if (y == map.height - 1) { nearbyTiles[NEARBY_TILE_KEY_DOWN] = 0xFF; } if (y == map.height - 1) { nearbyTiles[NEARBY_TILE_KEY_DOWN] = 4096; }
else { nearbyTiles[NEARBY_TILE_KEY_DOWN] = map.getTileFrom(mode, x, y + 1); } else { nearbyTiles[NEARBY_TILE_KEY_DOWN] = map.getTileFrom(mode, x, y + 1); }
// try for // try for
@@ -434,16 +413,16 @@ public class MapCamera {
return clampHTile(getRenderStartY() + div16(renderHeight) + 2); return clampHTile(getRenderStartY() + div16(renderHeight) + 2);
} }
private static boolean isConnectSelf(byte b) { private static boolean isConnectSelf(int b) {
return (Arrays.asList(TILES_CONNECT_SELF).contains(b)); return (Arrays.asList(TILES_CONNECT_SELF).contains((byte) b));
} }
private static boolean isDarkenAir(byte b) { private static boolean isDarkenAir(int b) {
return (Arrays.asList(TILES_DARKEN_AIR).contains(b)); return (Arrays.asList(TILES_DARKEN_AIR).contains((byte) b));
} }
private static boolean isBlendMul(byte b) { private static boolean isBlendMul(int b) {
return (Arrays.asList(TILES_BLEND_MUL).contains(b)); return (Arrays.asList(TILES_BLEND_MUL).contains((byte) b));
} }
private static void setBlendModeMul() { private static void setBlendModeMul() {

View File

@@ -516,11 +516,11 @@ public class MapGenerator {
for (int i = 0; i < height - pillarOffset; i++) { for (int i = 0; i < height - pillarOffset; i++) {
if (i < dirtThickness) { if (i < dirtThickness) {
map.getTerrainArray()[i + pillarOffset][x] = TileNameCode.DIRT; MapGenerator.map.setTileTerrain(x, i + pillarOffset, TileNameCode.DIRT);
map.getWallArray()[i + pillarOffset][x] = TileNameCode.DIRT; MapGenerator.map.setTileWall(x, i + pillarOffset, TileNameCode.DIRT);
} else { } else {
map.getTerrainArray()[i + pillarOffset][x] = TileNameCode.STONE; MapGenerator.map.setTileTerrain(x, i + pillarOffset, TileNameCode.STONE);
map.getWallArray()[i + pillarOffset][x] = TileNameCode.STONE; MapGenerator.map.setTileWall(x, i + pillarOffset, TileNameCode.STONE);
} }
} }
@@ -594,13 +594,13 @@ public class MapGenerator {
/* 2. Carve */ /* 2. Carve */
private static void carveCave(float[][] map, byte tile, String message) { private static void carveCave(float[][] map, int tile, String message) {
System.out.println("[MapGenerator] " + message); System.out.println("[MapGenerator] " + message);
for (int i = 0; i < height; i++) { for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) { for (int j = 0; j < width; j++) {
if (map[i][j] > 0.9) { if (map[i][j] > 0.9) {
MapGenerator.map.getTerrainArray()[i][j] = tile; MapGenerator.map.setTileTerrain(j, i, tile);
} }
} }
} }
@@ -613,14 +613,14 @@ public class MapGenerator {
* @param tile * @param tile
* @param message * @param message
*/ */
private static void carveByMap(float[][] map, float scarcity, byte tile, String message) { private static void carveByMap(float[][] map, float scarcity, int tile, String message) {
System.out.println("[MapGenerator] " + message); System.out.println("[MapGenerator] " + message);
for (int i = 0; i < height; i++) { for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) { for (int j = 0; j < width; j++) {
if (map[i][j] > gradientQuadratic(i, noiseGradientStart, noiseGrdCaveEnd) * if (map[i][j] > gradientQuadratic(i, noiseGradientStart, noiseGrdCaveEnd) *
scarcity) { scarcity) {
MapGenerator.map.getTerrainArray()[i][j] = tile; MapGenerator.map.setTileTerrain(j, i, tile);
} }
} }
} }
@@ -634,14 +634,14 @@ public class MapGenerator {
* @param tile * @param tile
* @param message * @param message
*/ */
private static void fillByMap(float[][] map, float scarcity, byte replaceFrom, byte tile, String message) { private static void fillByMap(float[][] map, float scarcity, int replaceFrom, int tile, String message) {
System.out.println("[MapGenerator] " + message); System.out.println("[MapGenerator] " + message);
for (int i = 0; i < height; i++) { for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) { for (int j = 0; j < width; j++) {
if (map[i][j] > getNoiseGradient(i, noiseGradientStart, noiseGradientEnd) * scarcity if (map[i][j] > getNoiseGradient(i, noiseGradientStart, noiseGradientEnd) * scarcity
&& MapGenerator.map.getTileFromTerrain(j, i) == replaceFrom) { && MapGenerator.map.getTileFromTerrain(j, i) == replaceFrom) {
MapGenerator.map.getTerrainArray()[i][j] = tile; MapGenerator.map.setTileTerrain(j, i, tile);
} }
} }
} }
@@ -655,7 +655,7 @@ public class MapGenerator {
* @param tile * @param tile
* @param message * @param message
*/ */
private static void fillByMapInverseGradFilter(float[][] map, float scarcity, byte replaceFrom, byte tile, String message) { private static void fillByMapInverseGradFilter(float[][] map, float scarcity, int replaceFrom, int tile, String message) {
System.out.println("[MapGenerator] " + message); System.out.println("[MapGenerator] " + message);
for (int i = 0; i < height; i++) { for (int i = 0; i < height; i++) {
@@ -663,7 +663,7 @@ public class MapGenerator {
if (map[i][j] > getNoiseGradientInversed(i, noiseGradientEnd, noiseGradientStart) if (map[i][j] > getNoiseGradientInversed(i, noiseGradientEnd, noiseGradientStart)
* scarcity * scarcity
&& MapGenerator.map.getTileFromTerrain(j, i) == replaceFrom) { && MapGenerator.map.getTileFromTerrain(j, i) == replaceFrom) {
MapGenerator.map.getTerrainArray()[i][j] = tile; MapGenerator.map.setTileTerrain(j, i, tile);
} }
} }
} }
@@ -679,20 +679,20 @@ public class MapGenerator {
* @param tile * @param tile
* @param message * @param message
*/ */
private static void fillByMapNoFilter(float[][] map, float scarcity, byte replaceFrom, byte tile, String message) { private static void fillByMapNoFilter(float[][] map, float scarcity, int replaceFrom, int tile, String message) {
System.out.println("[MapGenerator] " + message); System.out.println("[MapGenerator] " + message);
for (int i = 0; i < height; i++) { for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) { for (int j = 0; j < width; j++) {
if (map[i][j] > noiseGradientStart * scarcity if (map[i][j] > noiseGradientStart * scarcity
&& MapGenerator.map.getTileFromTerrain(j, i) == replaceFrom) { && MapGenerator.map.getTileFromTerrain(j, i) == replaceFrom) {
MapGenerator.map.getTerrainArray()[i][j] = tile; MapGenerator.map.setTileTerrain(j, i, tile);
} }
} }
} }
} }
private static void fillByMapNoFilterUnderground(float[][] map, float scarcity, byte replaceFrom, byte private static void fillByMapNoFilterUnderground(float[][] map, float scarcity, int replaceFrom, int
tile, String message) { tile, String message) {
System.out.println("[MapGenerator] " + message); System.out.println("[MapGenerator] " + message);
@@ -701,21 +701,20 @@ public class MapGenerator {
if (map[i][j] > noiseGradientStart * scarcity if (map[i][j] > noiseGradientStart * scarcity
&& MapGenerator.map.getTileFromTerrain(j, i) == replaceFrom && MapGenerator.map.getTileFromTerrain(j, i) == replaceFrom
&& MapGenerator.map.getTileFromWall(j, i) == TileNameCode.STONE) { && MapGenerator.map.getTileFromWall(j, i) == TileNameCode.STONE) {
MapGenerator.map.getTerrainArray()[i][j] = tile; MapGenerator.map.setTileTerrain(j, i, tile);
} }
} }
} }
} }
private static void fillByMap(float[][] map, float scarcity, byte replaceFrom, byte[] tile, String message) { private static void fillByMap(float[][] map, float scarcity, int replaceFrom, int[] tile, String message) {
System.out.println("[MapGenerator] " + message); System.out.println("[MapGenerator] " + message);
for (int i = 0; i < height; i++) { for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) { for (int j = 0; j < width; j++) {
if (map[i][j] > getNoiseGradient(i, noiseGradientStart, noiseGradientEnd) * scarcity if (map[i][j] > getNoiseGradient(i, noiseGradientStart, noiseGradientEnd) * scarcity
&& MapGenerator.map.getTileFromTerrain(j, i) == replaceFrom) { && MapGenerator.map.getTileFromTerrain(j, i) == replaceFrom) {
MapGenerator.map.getTerrainArray()[i][j] MapGenerator.map.setTileTerrain(j, i, tile[random.nextInt(tile.length)]);
= tile[random.nextInt(tile.length)];
} }
} }
} }
@@ -908,7 +907,7 @@ public class MapGenerator {
for (int i = height * 14 / 15; i < height; i++) { for (int i = height * 14 / 15; i < height; i++) {
for (int j = 0; j < width; j++) { for (int j = 0; j < width; j++) {
if (map.getTerrainArray()[i][j] == 0) { if (map.getTerrainArray()[i][j] == 0) {
map.getTerrainArray()[i][j] = TileNameCode.LAVA; map.setTileTerrain(j, i, TileNameCode.LAVA);
} }
} }
} }
@@ -938,7 +937,7 @@ public class MapGenerator {
catch (ArrayIndexOutOfBoundsException e) {} catch (ArrayIndexOutOfBoundsException e) {}
if (i != 4 && thisTile == TileNameCode.DIRT && nearbyWallTile == TileNameCode.AIR) { if (i != 4 && thisTile == TileNameCode.DIRT && nearbyWallTile == TileNameCode.AIR) {
map.getTerrainArray()[y][x] = TileNameCode.GRASS; map.setTileTerrain(x, y, TileNameCode.GRASS);
break; break;
} }
} }
@@ -951,15 +950,15 @@ public class MapGenerator {
return map.getTileFromTerrain(x, y) == TileNameCode.GRASS || map.getTileFromTerrain(x, y) == TileNameCode.DIRT; return map.getTileFromTerrain(x, y) == TileNameCode.GRASS || map.getTileFromTerrain(x, y) == TileNameCode.DIRT;
} }
private static void replaceIfTerrain(byte ifTile, int x, int y, byte replaceTile) { private static void replaceIfTerrain(int ifTileRaw, int x, int y, int replaceTileRaw) {
if (map.getTileFromTerrain(x, y) == ifTile) { if (map.getTileFromTerrain(x, y) == ifTileRaw) {
map.getTerrainArray()[y][x] = replaceTile; map.setTileTerrain(x, y, replaceTileRaw);
} }
} }
private static void replaceIfWall(byte ifTile, int x, int y, byte replaceTile) { private static void replaceIfWall(int ifTileRaw, int x, int y, int replaceTileRaw) {
if (map.getTileFromWall(x, y) == ifTile) { if (map.getTileFromWall(x, y) == ifTileRaw) {
map.getWallArray()[y][x] = replaceTile; map.setTileWall(x, y, replaceTileRaw);
} }
} }
@@ -973,16 +972,14 @@ public class MapGenerator {
for (int y = getTerrainHeightFromHeightMap(OCEAN_WIDTH) for (int y = getTerrainHeightFromHeightMap(OCEAN_WIDTH)
; y < getTerrainHeightFromHeightMap(ix) ; y < getTerrainHeightFromHeightMap(ix)
; y++) { ; y++) {
map.getTerrainArray() map.setTileTerrain(ix, y, TileNameCode.WATER);
[y][ix] = TileNameCode.WATER;
} }
} }
else if (worldOceanPosition == TYPE_OCEAN_RIGHT) { else if (worldOceanPosition == TYPE_OCEAN_RIGHT) {
for (int y = getTerrainHeightFromHeightMap(map.width - 1 - OCEAN_WIDTH) for (int y = getTerrainHeightFromHeightMap(map.width - 1 - OCEAN_WIDTH)
; y < getTerrainHeightFromHeightMap(map.width - 1 - ix) ; y < getTerrainHeightFromHeightMap(map.width - 1 - ix)
; y++) { ; y++) {
map.getTerrainArray() map.setTileTerrain(map.width - 1 - ix, y, TileNameCode.WATER);
[y][map.width - 1 - ix] = TileNameCode.WATER;
} }
} }
} }
@@ -992,22 +989,17 @@ public class MapGenerator {
if (worldOceanPosition == TYPE_OCEAN_LEFT) { if (worldOceanPosition == TYPE_OCEAN_LEFT) {
int terrainPoint = getTerrainHeightFromHeightMap(ix); int terrainPoint = getTerrainHeightFromHeightMap(ix);
map.getTerrainArray()
[terrainPoint + iy] map.setTileTerrain(ix, terrainPoint + iy, TileNameCode.SAND_BEACH);
[ix] = TileNameCode.SAND; // clear grass and make the sheet thicker
map.getTerrainArray() map.setTileTerrain(ix, terrainPoint + iy - 1, TileNameCode.SAND_BEACH);
[terrainPoint + iy - 1] // clear grass and make the sheet thicker
[ix] = TileNameCode.SAND;
} }
else if (worldOceanPosition == TYPE_OCEAN_RIGHT) { else if (worldOceanPosition == TYPE_OCEAN_RIGHT) {
int terrainPoint = getTerrainHeightFromHeightMap(map.width - 1 - ix); int terrainPoint = getTerrainHeightFromHeightMap(map.width - 1 - ix);
map.getTerrainArray() map.setTileTerrain(map.width - 1 - ix, terrainPoint + iy, TileNameCode.SAND_BEACH);
[terrainPoint + iy] // clear grass and make the sheet thicker
[map.width - 1 - ix] = TileNameCode.SAND; map.setTileTerrain(map.width - 1 - ix, terrainPoint + iy - 1, TileNameCode.SAND_BEACH);
map.getTerrainArray()
[terrainPoint + iy - 1] // clear grass and make the sheet thicker
[map.width - 1 - ix] = TileNameCode.SAND;
} }
} }
} }

View File

@@ -0,0 +1,8 @@
package com.Torvald.Terrarum;
/**
* Created by minjaesong on 16-03-05.
*/
public @interface NoNegative {
String info() default "Only positive number is acceptable.";
}

View File

@@ -0,0 +1,8 @@
package com.Torvald.Terrarum;
/**
* Created by minjaesong on 16-03-05.
*/
public @interface NonZero {
String info() default "Non-zero value";
}

View File

@@ -0,0 +1,8 @@
package com.Torvald.Terrarum;
/**
* Created by minjaesong on 16-03-05.
*/
public @interface NotNull {
String info() default "Cannot be null.";
}

View File

@@ -0,0 +1,8 @@
package com.Torvald.Terrarum;
/**
* Created by minjaesong on 16-03-05.
*/
public @interface Nullable {
String info() default "Null value is acceptable.";
}

View File

@@ -40,6 +40,7 @@ public class Terrarum extends StateBasedGame {
public static final int WIDTH = 1060; public static final int WIDTH = 1060;
public static final int HEIGHT = 742; // IMAX ratio public static final int HEIGHT = 742; // IMAX ratio
public static boolean VSYNC = true; public static boolean VSYNC = true;
public static final int VSYNC_TRIGGER_THRESHOLD = 56;
public static Game game; public static Game game;
@@ -102,6 +103,8 @@ public class Terrarum extends StateBasedGame {
} }
} }
appgc.getInput().enableKeyRepeat();
game = new Game(); game = new Game();
addState(game); addState(game);
} }

View File

@@ -7,52 +7,58 @@ import com.Torvald.Terrarum.Terrarum;
*/ */
public class TileNameCode { public class TileNameCode {
public static final byte AIR = 0; public static final int AIR = 0;
public static final byte STONE = 1; public static final int STONE = TilePropCodex.indexDamageToArrayAddr(1, 0);
public static final byte DIRT = 2; public static final int STONE_QUARRIED = TilePropCodex.indexDamageToArrayAddr(1, 1);
public static final byte GRASS = 3; public static final int DIRT = TilePropCodex.indexDamageToArrayAddr(2, 0);
public static final int GRASS = TilePropCodex.indexDamageToArrayAddr(2, 1);
public static final byte PLANK_NORMAL = 4; public static final int PLANK_NORMAL = TilePropCodex.indexDamageToArrayAddr(3, 0);
public static final byte PLANK_EBONY = 5; public static final int PLANK_EBONY = TilePropCodex.indexDamageToArrayAddr(3, 1);
public static final byte PLANK_BIRCH = 6; public static final int PLANK_BIRCH = TilePropCodex.indexDamageToArrayAddr(3, 2);
public static final byte PLANK_BLOODROSE = 7; public static final int PLANK_BLOODROSE = TilePropCodex.indexDamageToArrayAddr(3, 3);
public static final byte TRUNK_NORMAL = 8; public static final int TRUNK_NORMAL = TilePropCodex.indexDamageToArrayAddr(4, 0);
public static final byte TRUNK_EBONY = 9; public static final int TRUNK_EBONY = TilePropCodex.indexDamageToArrayAddr(4, 1);
public static final byte TRUNK_BIRCH = 10; public static final int TRUNK_BIRCH = TilePropCodex.indexDamageToArrayAddr(4, 2);
public static final byte TRUNK_BLOODROSE = 11; public static final int TRUNK_BLOODROSE = TilePropCodex.indexDamageToArrayAddr(4, 3);
public static final byte STONE_QUARRIED = 12; public static final int SAND = TilePropCodex.indexDamageToArrayAddr(5, 0);
public static final byte SAND = 13; public static final int SAND_BEACH = TilePropCodex.indexDamageToArrayAddr(5, 1);
public static final byte GRAVEL = 14; public static final int SAND_RED = TilePropCodex.indexDamageToArrayAddr(5, 2);
public static final int SAND_DESERT = TilePropCodex.indexDamageToArrayAddr(5, 3);
public static final int SAND_BLACK = TilePropCodex.indexDamageToArrayAddr(5, 4);
public static final int GRAVEL = TilePropCodex.indexDamageToArrayAddr(6, 0);
public static final byte ORE_COPPER = 15; public static final int ORE_COPPER = TilePropCodex.indexDamageToArrayAddr(7, 0);
public static final byte ORE_IRON = 16; public static final int ORE_IRON = TilePropCodex.indexDamageToArrayAddr(7, 1);
public static final byte ORE_GOLD = 17; public static final int ORE_GOLD = TilePropCodex.indexDamageToArrayAddr(7, 2);
public static final byte ORE_SILVER = 18; public static final int ORE_SILVER = TilePropCodex.indexDamageToArrayAddr(7, 3);
public static final byte ORE_ILMENITE = 19; public static final int ORE_ILMENITE = TilePropCodex.indexDamageToArrayAddr(7, 4);
public static final byte ORE_AURICHALCUM = 20; public static final int ORE_AURICHALCUM = TilePropCodex.indexDamageToArrayAddr(7, 5);
public static final byte RAW_RUBY = 21; public static final int RAW_RUBY = TilePropCodex.indexDamageToArrayAddr(8, 0);
public static final byte RAW_EMERALD = 22; public static final int RAW_EMERALD = TilePropCodex.indexDamageToArrayAddr(8, 1);
public static final byte RAW_SAPPHIRE = 23; public static final int RAW_SAPPHIRE = TilePropCodex.indexDamageToArrayAddr(8, 2);
public static final byte RAW_TOPAZ = 24; public static final int RAW_TOPAZ = TilePropCodex.indexDamageToArrayAddr(8, 3);
public static final byte RAW_DIAMOND = 25; public static final int RAW_DIAMOND = TilePropCodex.indexDamageToArrayAddr(8, 4);
public static final byte RAW_AMETHYST = 26; public static final int RAW_AMETHYST = TilePropCodex.indexDamageToArrayAddr(8, 5);
public static final byte SNOW = 27; public static final int SNOW = TilePropCodex.indexDamageToArrayAddr(9, 0);
public static final byte ICE_FRAGILE = 28; public static final int ICE_FRAGILE = TilePropCodex.indexDamageToArrayAddr(9, 1);
public static final byte ICE_NATURAL = 29; public static final int ICE_NATURAL = TilePropCodex.indexDamageToArrayAddr(9, 2);
public static final byte ICE_MAGICAL = 30; public static final int ICE_MAGICAL = TilePropCodex.indexDamageToArrayAddr(9, 3);
public static final byte PLATFORM_STONE = 31; public static final int PLATFORM_STONE = TilePropCodex.indexDamageToArrayAddr(10, 0);
public static final byte PLATFORM_WOODEN = 32; public static final int PLATFORM_WOODEN = TilePropCodex.indexDamageToArrayAddr(10, 1);
public static final byte PLATFORM_EBONY = 33; public static final int PLATFORM_EBONY = TilePropCodex.indexDamageToArrayAddr(10, 2);
public static final byte PLATFORM_BIRCH = 34; public static final int PLATFORM_BIRCH = TilePropCodex.indexDamageToArrayAddr(10, 3);
public static final byte PLATFORM_BLOODROSE = 35; public static final int PLATFORM_BLOODROSE = TilePropCodex.indexDamageToArrayAddr(10, 4);
public static final byte WATER = (byte) 239; public static final int TORCH = TilePropCodex.indexDamageToArrayAddr(11, 0);
public static final byte LAVA = (byte) 255;
public static final int WATER = TilePropCodex.indexDamageToArrayAddr(254, 15);
public static final int LAVA = TilePropCodex.indexDamageToArrayAddr(255, 15);
} }

View File

@@ -6,6 +6,7 @@ package com.Torvald.Terrarum.TileProperties;
public class TileProp { public class TileProp {
private int id; private int id;
private int damage;
private String name; private String name;
private char opacity; // colour attenuation private char opacity; // colour attenuation
@@ -22,7 +23,9 @@ public class TileProp {
private boolean opaque; // hides wall or not private boolean opaque; // hides wall or not
private char luminosity; private char luminosity;
private int drop; private int drop;
private int dropDamage;
private boolean fallable; private boolean fallable;
@@ -36,6 +39,14 @@ public class TileProp {
this.id = id; this.id = id;
} }
public int getDamage() {
return damage;
}
public void setDamage(int damage) {
this.damage = damage;
}
public String getName() { public String getName() {
return name; return name;
} }
@@ -116,6 +127,14 @@ public class TileProp {
this.drop = drop; this.drop = drop;
} }
public int getDropDamage() {
return dropDamage;
}
public void setDropDamage(int dropDamage) {
this.dropDamage = dropDamage;
}
public boolean isFallable() { public boolean isFallable() {
return fallable; return fallable;
} }

View File

@@ -2,6 +2,7 @@ package com.Torvald.Terrarum.TileProperties;
import com.Torvald.CSVFetcher; import com.Torvald.CSVFetcher;
import com.Torvald.Terrarum.GameMap.MapLayer; import com.Torvald.Terrarum.GameMap.MapLayer;
import com.Torvald.Terrarum.GameMap.PairedMapLayer;
import org.apache.commons.csv.CSVRecord; import org.apache.commons.csv.CSVRecord;
import java.io.IOException; import java.io.IOException;
@@ -16,7 +17,7 @@ public class TilePropCodex {
private static TileProp[] tileProps; private static TileProp[] tileProps;
public TilePropCodex() { public TilePropCodex() {
tileProps = new TileProp[MapLayer.TILES_SUPPORTED]; tileProps = new TileProp[MapLayer.TILES_SUPPORTED * (PairedMapLayer.RANGE)];
for (int i = 0; i < tileProps.length; i++) { for (int i = 0; i < tileProps.length; i++) {
tileProps[i] = new TileProp(); tileProps[i] = new TileProp();
@@ -31,7 +32,10 @@ public class TilePropCodex {
System.out.println("[TilePropCodex] Building tile properties table"); System.out.println("[TilePropCodex] Building tile properties table");
records.forEach(record -> records.forEach(record ->
setProp(tileProps[intVal(record, "id")], record setProp(tileProps[indexDamageToArrayAddr
(intVal(record, "id")
, intVal(record, "dmg"))
], record
)); ));
} }
catch (IOException e) { catch (IOException e) {
@@ -39,27 +43,42 @@ public class TilePropCodex {
} }
} }
public static TileProp getProp(int index) { public static TileProp getProp(int index, int damage) {
try { try {
tileProps[index].getId(); tileProps[indexDamageToArrayAddr(index, damage)].getId();
} }
catch (NullPointerException e) { catch (NullPointerException e) {
throw new NullPointerException("Tile prop with id " + String.valueOf(index) throw new NullPointerException("Tile prop with id " + index
+ " and damage " + damage
+ " does not exist."); + " does not exist.");
} }
return tileProps[index]; return tileProps[indexDamageToArrayAddr(index, damage)];
}
public static TileProp getProp(int rawIndex) {
try {
tileProps[rawIndex].getId();
}
catch (NullPointerException e) {
throw new NullPointerException("Tile prop with raw id " + rawIndex
+ " does not exist.");
}
return tileProps[rawIndex];
} }
private static void setProp(TileProp prop, CSVRecord record) { private static void setProp(TileProp prop, CSVRecord record) {
prop.setName(record.get("name")); prop.setName(record.get("name"));
prop.setId(intVal(record, "id")); prop.setId(intVal(record, "id"));
prop.setDamage(intVal(record, "dmg"));
prop.setOpacity((char) intVal(record, "opacity")); prop.setOpacity((char) intVal(record, "opacity"));
prop.setStrength(intVal(record, "strength")); prop.setStrength(intVal(record, "strength"));
prop.setLuminosity((char) intVal(record, "lumcolor")); prop.setLuminosity((char) intVal(record, "lumcolor"));
prop.setDrop(intVal(record, "drop")); prop.setDrop(intVal(record, "drop"));
prop.setDropDamage(intVal(record, "ddmg"));
prop.setFriction(intVal(record, "friction")); prop.setFriction(intVal(record, "friction"));
prop.setFluid(boolVal(record, "fluid")); prop.setFluid(boolVal(record, "fluid"));
@@ -81,4 +100,8 @@ public class TilePropCodex {
private static boolean boolVal(CSVRecord rec, String s) { private static boolean boolVal(CSVRecord rec, String s) {
return !(intVal(rec, s) == 0); return !(intVal(rec, s) == 0);
} }
public static int indexDamageToArrayAddr(int index, int damage) {
return (index * (PairedMapLayer.RANGE) + damage);
}
} }

View File

@@ -1,49 +1,60 @@
"id";"name" ;"opacity";"strength";"fluid";"viscosity";"solid";"wall";"lumcolor";"opaque";"drop";"fall";"friction" "id";"dmg";"name" ;"opacity";"strength";"fluid";"viscosity";"solid";"wall";"lumcolor";"opaque";"drop";"ddmg";"fall";"friction"
"0";"TILE_AIR" ; "1641"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0";"16" "0"; "0";"TILE_AIR" ; "1641"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0";"16"
"1";"TILE_STONE" ; "8205"; "25"; "0"; "0"; "1"; "1"; "0"; "1"; "1"; "0";"16" "1"; "0";"TILE_STONE" ; "8205"; "25"; "0"; "0"; "1"; "1"; "0"; "1"; "1"; "0"; "0";"16"
"2";"TILE_DIRT" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "2"; "0";"16" "1"; "1";"TILE_STONE_QUARRIED" ; "8205"; "25"; "0"; "0"; "1"; "1"; "0"; "1"; "1"; "1"; "0";"16"
"3";"TILE_GRASS" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "2"; "0";"16" "2"; "0";"TILE_DIRT" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "2"; "0"; "0";"16"
"4";"TILE_PLANK_NORMAL" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "4"; "0";"16" "2"; "1";"TILE_GRASS" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "2"; "1"; "0";"16"
"5";"TILE_PLANK_EBONY" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "0";"16"
"6";"TILE_PLANK_BIRCH" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "6"; "0";"16"
"7";"TILE_PLANK_BLOODROSE" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "7"; "0";"16"
"8";"TILE_TRUNK_NORMAL" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "0";"16"
"9";"TILE_TRUNK_EBONY" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "9"; "0";"16"
"10";"TILE_TRUNK_BIRCH" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "10"; "0";"16"
"11";"TILE_TRUNK_BLOODROSE" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "11"; "0";"16"
"12";"TILE_STONE_QUARRIED" ; "8205"; "25"; "0"; "0"; "1"; "1"; "0"; "1"; "12"; "0";"16"
"13";"TILE_SAND" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "13"; "1";"16"
"14";"TILE_GRAVEL" ; "8205"; "6"; "0"; "0"; "1"; "0"; "0"; "1"; "14"; "1";"16"
"15";"TILE_ORE_MALACHITE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "15"; "0";"16" "3"; "0";"TILE_PLANK_NORMAL" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "0"; "0";"16"
"16";"TILE_ORE_HEMATITE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "16"; "0";"16" "3"; "1";"TILE_PLANK_EBONY" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "1"; "0";"16"
"17";"TILE_ORE_NATURAL_GOLD" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "17"; "0";"16" "3"; "2";"TILE_PLANK_BIRCH" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "2"; "0";"16"
"18";"TILE_ORE_NATURAL_SILVER" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "18"; "0";"16" "3"; "3";"TILE_PLANK_BLOODROSE" ; "8205"; "12"; "0"; "0"; "1"; "1"; "0"; "1"; "3"; "3"; "0";"16"
"19";"TILE_ORE_RUTILE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "19"; "0";"16"
"20";"TILE_ORE_AURICHALCUMITE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "20"; "0";"16"
"21";"TILE_GEM_RUBY" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "21"; "0";"16"
"22";"TILE_GEM_EMERALD" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "22"; "0";"16"
"23";"TILE_GEM_SAPPHIRE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "23"; "0";"16"
"24";"TILE_GEM_TOPAZ" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "24"; "0";"16"
"25";"TILE_GEM_DIAMOND" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "25"; "0";"16"
"26";"TILE_GEM_AMETHYST" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "26"; "0";"16"
"27";"TILE_SNOW" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "27"; "0";"16" "4"; "0";"TILE_TRUNK_NORMAL" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "0"; "0";"16"
"28";"TILE_ICE_FRAGILE" ; "3282"; "1"; "0"; "0"; "1"; "0"; "0"; "0"; "28"; "0";"16" "4"; "1";"TILE_TRUNK_EBONY" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "1"; "0";"16"
"29";"TILE_ICE_NATURAL" ; "6564"; "25"; "0"; "0"; "1"; "1"; "0"; "1"; "29"; "0"; "8" "4"; "2";"TILE_TRUNK_BIRCH" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "2"; "0";"16"
"30";"TILE_ICE_CLEAR_MAGICAL" ; "8205"; "25"; "0"; "0"; "1"; "1"; "5009"; "0"; "30"; "0"; "8" "4"; "3";"TILE_TRUNK_BLOODROSE" ; "8205"; "12"; "0"; "0"; "1"; "0"; "0"; "1"; "3"; "3"; "0";"16"
# see scandinavian name set female of this tile id!
"31";"TILE_PLATFORM_STONE" ; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "31"; "0";"16"
"32";"TILE_PLATFORM_WOODEN" ; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "32"; "0";"16"
"33";"TILE_PLATFORM_EBONY" ; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "33"; "0";"16"
"34";"TILE_PLATFORM_BIRCH" ; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "34"; "0";"16"
"35";"TILE_PLATFORM_BLOODROSE" ; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "0"; "35"; "0";"16"
"36";"TILE_TORCH" ; "0"; "0"; "0"; "0"; "0"; "0"; "63412"; "0"; "36"; "0";"16" "5"; "0";"TILE_SAND" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "0"; "1";"16"
"5"; "1";"TILE_SAND_WHITE" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "1"; "1";"16"
"5"; "2";"TILE_SAND_RED" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "2"; "1";"16"
"5"; "3";"TILE_SAND" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "3"; "1";"16"
"5"; "4";"TILE_SAND_BLACK" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "5"; "4"; "1";"16"
"6"; "0";"TILE_GRAVEL" ; "8205"; "6"; "0"; "0"; "1"; "0"; "0"; "1"; "6"; "0"; "1";"16"
"6"; "1";"TILE_GRAVEL_GREY" ; "8205"; "6"; "0"; "0"; "1"; "0"; "0"; "1"; "6"; "1"; "1";"16"
"7"; "0";"TILE_ORE_MALACHITE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "0"; "0";"16"
"7"; "1";"TILE_ORE_HEMATITE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "1"; "0";"16"
"7"; "2";"TILE_ORE_NATURAL_GOLD" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "2"; "0";"16"
"7"; "3";"TILE_ORE_NATURAL_SILVER" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "3"; "0";"16"
"7"; "4";"TILE_ORE_RUTILE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "4"; "0";"16"
"7"; "5";"TILE_ORE_AURICHALCUMITE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "7"; "5"; "0";"16"
"8"; "0";"TILE_GEM_RUBY" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "0"; "0";"16"
"8"; "1";"TILE_GEM_EMERALD" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "1"; "0";"16"
"8"; "2";"TILE_GEM_SAPPHIRE" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "2"; "0";"16"
"8"; "3";"TILE_GEM_TOPAZ" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "3"; "0";"16"
"8"; "4";"TILE_GEM_DIAMOND" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "4"; "0";"16"
"8"; "5";"TILE_GEM_AMETHYST" ; "8205"; "25"; "0"; "0"; "1"; "0"; "0"; "1"; "8"; "5"; "0";"16"
"9"; "0";"TILE_SNOW" ; "8205"; "6"; "0"; "0"; "1"; "1"; "0"; "1"; "9"; "0"; "0";"16"
"9"; "1";"TILE_ICE_FRAGILE" ; "3282"; "1"; "0"; "0"; "1"; "0"; "0"; "0"; "9"; "1"; "0";"16"
"9"; "2";"TILE_ICE_NATURAL" ; "6564"; "25"; "0"; "0"; "1"; "1"; "0"; "1"; "9"; "2"; "0"; "8"
"9"; "3";"TILE_ICE_CLEAR_MAGICAL" ; "8205"; "25"; "0"; "0"; "1"; "1"; "5009"; "0"; "9"; "3"; "0"; "8"
"10"; "0";"TILE_PLATFORM_STONE" ; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "0"; "0";"16"
"10"; "1";"TILE_PLATFORM_WOODEN" ; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "1"; "0";"16"
"10"; "2";"TILE_PLATFORM_EBONY" ; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "2"; "0";"16"
"10"; "3";"TILE_PLATFORM_BIRCH" ; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "3"; "0";"16"
"10"; "4";"TILE_PLATFORM_BLOODROSE" ; "0"; "1"; "0"; "0"; "0"; "0"; "0"; "0"; "10"; "4"; "0";"16"
"11"; "0";"TILE_TORCH" ; "0"; "0"; "0"; "0"; "0"; "0"; "63412"; "0"; "11"; "0"; "0";"16"
# 63412 (ffa44e) : real candlelight colour taken from properly configured camera. # 63412 (ffa44e) : real candlelight colour taken from properly configured camera.
"239";"TILE_WATER" ; "6522"; "100"; "1"; "16"; "0"; "0"; "0"; "0"; "239"; "0";"16" "254"; "15";"TILE_WATER" ; "6522"; "100"; "1"; "16"; "0"; "0"; "0"; "0"; "-1"; "-1"; "0";"16"
"255";"TILE_LAVA" ; "62358"; "100"; "1"; "16"; "0"; "0"; "48320"; "0"; "239"; "0";"16" "255"; "15";"TILE_LAVA" ; "62358"; "100"; "1"; "16"; "0"; "0"; "48320"; "0"; "-1"; "-1"; "0";"16"
# Friction: 0: frictionless, <16: slippery, 16: regular, >16: sticky # Friction: 0: frictionless, <16: slippery, 16: regular, >16: sticky
# Opacity/Lumcolor: 40-step RGB # Opacity/Lumcolor: 40-step RGB
# Opaque: whether the tile completely hides wall behind # Opaque: whether the tile completely hides wall behind
# Solid: whether the tile has collision
# Viscosity: (walkspeedmax) * (1 + (n/16)) # Viscosity: (walkspeedmax) * (1 + (n/16))
Can't render this file because it contains an unexpected character in line 1 and column 12.

View File

@@ -198,51 +198,6 @@ public class BasicDebugInfoWindow implements UICanvas {
} }
@Override
public void keyPressed(int key, char c) {
}
@Override
public void keyReleased(int key, char c) {
}
@Override
public void mouseMoved(int oldx, int oldy, int newx, int newy) {
}
@Override
public void mouseDragged(int oldx, int oldy, int newx, int newy) {
}
@Override
public void mousePressed(int button, int x, int y) {
}
@Override
public void mouseReleased(int button, int x, int y) {
}
@Override
public void mouseWheelMoved(int change) {
}
@Override
public void controllerButtonPressed(int controller, int button) {
}
@Override
public void controllerButtonReleased(int controller, int button) {
}
@Override @Override
public void processInput(Input input) { public void processInput(Input input) {

View File

@@ -70,51 +70,6 @@ public class Bulletin implements UICanvas {
System.out.println("arst"); System.out.println("arst");
} }
@Override
public void keyPressed(int key, char c) {
}
@Override
public void keyReleased(int key, char c) {
}
@Override
public void mouseMoved(int oldx, int oldy, int newx, int newy) {
}
@Override
public void mouseDragged(int oldx, int oldy, int newx, int newy) {
}
@Override
public void mousePressed(int button, int x, int y) {
}
@Override
public void mouseReleased(int button, int x, int y) {
}
@Override
public void mouseWheelMoved(int change) {
}
@Override
public void controllerButtonPressed(int controller, int button) {
}
@Override
public void controllerButtonReleased(int controller, int button) {
}
@Override @Override
public void processInput(Input input) { public void processInput(Input input) {

View File

@@ -12,7 +12,7 @@ import org.newdawn.slick.Input;
/** /**
* Created by minjaesong on 15-12-31. * Created by minjaesong on 15-12-31.
*/ */
public class ConsoleWindow implements UICanvas { public class ConsoleWindow implements UICanvas, UITypable {
Color UIColour = new Color(0x90000000); Color UIColour = new Color(0x90000000);
@@ -106,41 +106,6 @@ public class ConsoleWindow implements UICanvas {
} }
@Override
public void mouseMoved(int oldx, int oldy, int newx, int newy) {
}
@Override
public void mouseDragged(int oldx, int oldy, int newx, int newy) {
}
@Override
public void mousePressed(int button, int x, int y) {
}
@Override
public void mouseReleased(int button, int x, int y) {
}
@Override
public void mouseWheelMoved(int change) {
}
@Override
public void controllerButtonPressed(int controller, int button) {
}
@Override
public void controllerButtonReleased(int controller, int button) {
}
@Override @Override
public void processInput(Input input) { public void processInput(Input input) {

View File

@@ -70,51 +70,6 @@ public class Message implements UICanvas {
g.setDrawMode(Graphics.MODE_NORMAL); g.setDrawMode(Graphics.MODE_NORMAL);
} }
@Override
public void keyPressed(int key, char c) {
}
@Override
public void keyReleased(int key, char c) {
}
@Override
public void mouseMoved(int oldx, int oldy, int newx, int newy) {
}
@Override
public void mouseDragged(int oldx, int oldy, int newx, int newy) {
}
@Override
public void mousePressed(int button, int x, int y) {
}
@Override
public void mouseReleased(int button, int x, int y) {
}
@Override
public void mouseWheelMoved(int change) {
}
@Override
public void controllerButtonPressed(int controller, int button) {
}
@Override
public void controllerButtonReleased(int controller, int button) {
}
@Override @Override
public void processInput(Input input) { public void processInput(Input input) {

View File

@@ -8,22 +8,6 @@ import java.util.LinkedList;
/** /**
* Created by minjaesong on 15-12-31. <br> * Created by minjaesong on 15-12-31. <br>
* <br>
* Methods: <br>
* &nbsp; &nbsp; &nbsp; &nbsp; UICanvas() <br>
* &nbsp; &nbsp; &nbsp; &nbsp; update(GameContainer gc, int delta_t) <br>
* &nbsp; &nbsp; &nbsp; &nbsp; render(GameContainer gc, Graphics g) <br>
* &nbsp; &nbsp; &nbsp; &nbsp; keyPressed(int key, char c) <br>
* &nbsp; &nbsp; &nbsp; &nbsp; keyReleased(int key, char c) <br>
* &nbsp; &nbsp; &nbsp; &nbsp; mouseMoved(int oldx, int oldy, int newx, int newy) <br>
* &nbsp; &nbsp; &nbsp; &nbsp; mouseDragged(int oldx, int oldy, int newx, int newy) <br>
* &nbsp; &nbsp; &nbsp; &nbsp; mousePressed(int button, int x, int y) <br>
* &nbsp; &nbsp; &nbsp; &nbsp; mouseReleased(int button, int x, int y) <br>
* &nbsp; &nbsp; &nbsp; &nbsp; mouseWheelMoved(int change) <br>
* &nbsp; &nbsp; &nbsp; &nbsp; controllerButtonPressed(int controller, int button) <br>
* &nbsp; &nbsp; &nbsp; &nbsp; controllerButtonReleased(int controller, int button) <br>
* &nbsp; &nbsp; &nbsp; &nbsp; processInput(Input input) <br>
* <br>
*/ */
public interface UICanvas { public interface UICanvas {
@@ -35,24 +19,6 @@ public interface UICanvas {
void render(GameContainer gc, Graphics g); void render(GameContainer gc, Graphics g);
void keyPressed(int key, char c);
void keyReleased(int key, char c);
void mouseMoved(int oldx, int oldy, int newx, int newy);
void mouseDragged(int oldx, int oldy, int newx, int newy);
void mousePressed(int button, int x, int y);
void mouseReleased(int button, int x, int y);
void mouseWheelMoved(int change);
void controllerButtonPressed(int controller, int button);
void controllerButtonReleased(int controller, int button);
void processInput(Input input); void processInput(Input input);
} }

View File

@@ -0,0 +1,22 @@
package com.Torvald.Terrarum.UserInterface;
/**
* Created by minjaesong on 16-03-06.
*/
public interface UIClickable {
void mouseMoved(int oldx, int oldy, int newx, int newy);
void mouseDragged(int oldx, int oldy, int newx, int newy);
void mousePressed(int button, int x, int y);
void mouseReleased(int button, int x, int y);
void mouseWheelMoved(int change);
void controllerButtonPressed(int controller, int button);
void controllerButtonReleased(int controller, int button);
}

View File

@@ -78,7 +78,7 @@ public class UIHandler {
public void setVisibility(boolean b){ public void setVisibility(boolean b){
if (alwaysVisible) { if (alwaysVisible) {
throw new RuntimeException("Tried to 'set visibility of' constant UI"); throw new RuntimeException("[UIHandler] Tried to 'set visibility of' constant UI");
} }
visible = b; visible = b;
} }
@@ -110,21 +110,21 @@ public class UIHandler {
public void setAsOpening(){ public void setAsOpening(){
if (alwaysVisible) { if (alwaysVisible) {
throw new RuntimeException("Tried to 'open' constant UI"); throw new RuntimeException("[UIHandler] Tried to 'open' constant UI");
} }
visible = true; visible = true;
} }
public void setAsClosing(){ public void setAsClosing(){
if (alwaysVisible) { if (alwaysVisible) {
throw new RuntimeException("Tried to 'close' constant UI"); throw new RuntimeException("[UIHandler] Tried to 'close' constant UI");
} }
visible = false; visible = false;
} }
public void toggleOpening() { public void toggleOpening() {
if (alwaysVisible) { if (alwaysVisible) {
throw new RuntimeException("Tried to 'toggle opening of' constant UI"); throw new RuntimeException("[UIHandler] Tried to 'toggle opening of' constant UI");
} }
if (visible) { if (visible) {
if (!closing) { if (!closing) {
@@ -143,39 +143,39 @@ public class UIHandler {
} }
public void keyPressed(int key, char c) { public void keyPressed(int key, char c) {
if (visible) { ui.keyPressed(key, c); } if (visible && ui instanceof UITypable) { ((UITypable) (ui)).keyPressed(key, c); }
} }
public void keyReleased(int key, char c) { public void keyReleased(int key, char c) {
if (visible) { ui.keyReleased(key, c); } if (visible && ui instanceof UITypable) { ((UITypable) (ui)).keyReleased(key, c); }
} }
public void mouseMoved(int oldx, int oldy, int newx, int newy) { public void mouseMoved(int oldx, int oldy, int newx, int newy) {
if (visible) { ui.mouseMoved(oldx, oldy, newx, newy); } if (visible && ui instanceof UIClickable) { ((UIClickable) (ui)).mouseMoved(oldx, oldy, newx, newy); }
} }
public void mouseDragged(int oldx, int oldy, int newx, int newy) { public void mouseDragged(int oldx, int oldy, int newx, int newy) {
if (visible) { ui.mouseDragged(oldx, oldy, newx, newy); } if (visible && ui instanceof UIClickable) { ((UIClickable) (ui)).mouseDragged(oldx, oldy, newx, newy); }
} }
public void mousePressed(int button, int x, int y) { public void mousePressed(int button, int x, int y) {
if (visible) { ui.mousePressed(button, x, y); } if (visible && ui instanceof UIClickable) { ((UIClickable) (ui)).mousePressed(button, x, y); }
} }
public void mouseReleased(int button, int x, int y) { public void mouseReleased(int button, int x, int y) {
if (visible) { ui.mouseReleased(button, x, y); } if (visible && ui instanceof UIClickable) { ((UIClickable) (ui)).mouseReleased(button, x, y); }
} }
public void mouseWheelMoved(int change) { public void mouseWheelMoved(int change) {
if (visible) { ui.mouseWheelMoved(change); } if (visible && ui instanceof UIClickable) { ((UIClickable) (ui)).mouseWheelMoved(change); }
} }
public void controllerButtonPressed(int controller, int button) { public void controllerButtonPressed(int controller, int button) {
if (visible) { ui.controllerButtonPressed(controller, button); } if (visible && ui instanceof UIClickable) { ((UIClickable) (ui)).controllerButtonPressed(controller, button); }
} }
public void controllerButtonReleased(int controller, int button) { public void controllerButtonReleased(int controller, int button) {
if (visible) { ui.controllerButtonReleased(controller, button); } if (visible && ui instanceof UIClickable) { ((UIClickable) (ui)).controllerButtonReleased(controller, button); }
} }
public boolean isTakingControl() { public boolean isTakingControl() {

View File

@@ -0,0 +1,12 @@
package com.Torvald.Terrarum.UserInterface;
/**
* Created by minjaesong on 16-03-06.
*/
public interface UITypable {
void keyPressed(int key, char c);
void keyReleased(int key, char c);
}