mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 20:31:51 +09:00
better console command parsing (now you can use quots), font support for Latin Extension A, now you can draw Runics also
Former-commit-id: 76aef3e704f171e23d6f0a6f78b051717e0f3212 Former-commit-id: 03373859fb5d858afbf4e92528dceb2dc118c763
This commit is contained in:
@@ -1,8 +1,5 @@
|
||||
package com.Torvald.ImageFont;
|
||||
|
||||
import com.Torvald.Terrarum.MapDrawer.LightmapRenderer;
|
||||
import com.Torvald.Terrarum.Terrarum;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.newdawn.slick.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
@@ -16,28 +13,34 @@ public class GameFontBase implements Font {
|
||||
static SpriteSheet asciiSheet;
|
||||
static SpriteSheet asciiSheetEF;
|
||||
static SpriteSheet runicSheet;
|
||||
static SpriteSheet extASheet;
|
||||
static SpriteSheet extASheetEF;
|
||||
|
||||
static final int JUNG_COUNT = 21;
|
||||
static final int JONG_COUNT = 28;
|
||||
|
||||
static final int W_CJK = 10;
|
||||
static final int W_CJK_DRAW = 11;
|
||||
static final int W_EM = 9; // width of regular letters, including m
|
||||
static final int W_EF = 5; // width of letter f, t, i, l
|
||||
static final int W_LATIN_WIDE = 9; // width of regular letters, including m
|
||||
static final int W_LATIN_NARROW = 5; // width of letter f, t, i, l
|
||||
static final int H = 20;
|
||||
static final int H_CJK = 16;
|
||||
|
||||
static final int SHEET_EM = 0;
|
||||
static final int SHEET_EF = 1;
|
||||
static final int SHEET_HANGUL = 3;
|
||||
static final int SHEET_CJKPUNCT = 4;
|
||||
static final int SHEET_KANA = 5;
|
||||
static final int SHEET_RUNIC = 6;
|
||||
static final int SHEET_ASCII_EM = 0;
|
||||
static final int SHEET_ASCII_EF = 1;
|
||||
static final int SHEET_HANGUL = 2;
|
||||
static final int SHEET_RUNIC = 3;
|
||||
static final int SHEET_EXTA_EM = 4;
|
||||
static final int SHEET_EXTA_EF = 5;
|
||||
|
||||
static SpriteSheet[] sheetKey;
|
||||
static final Character[] EFlist = {
|
||||
' ','!','"','\'',',','.','(',')',':',';','I','[',']','`','f','i'
|
||||
,'j','l','t','{','|','}'
|
||||
static final Character[] asciiEFList = {
|
||||
' ','!','"','\'','(',')','I','[',']','`','f','i','j','l','t','{'
|
||||
,'|','}',0xA1,'Ì','Í','Î','Ï','ì','í','î','ï','·'
|
||||
};
|
||||
|
||||
static final Character[] extAEFList = {
|
||||
0x12E, 0x12F, 0x130, 0x131, 0x135, 0x13A, 0x13C, 0x142, 0x163, 0x167, 0x17F
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -65,8 +68,12 @@ public class GameFontBase implements Font {
|
||||
return ret;
|
||||
}
|
||||
|
||||
private boolean isEF(char c) {
|
||||
return (Arrays.asList(EFlist).contains(c));
|
||||
private boolean isAsciiEF(char c) {
|
||||
return (Arrays.asList(asciiEFList).contains(c));
|
||||
}
|
||||
|
||||
private boolean isExtAEF(char c) {
|
||||
return (Arrays.asList(extAEFList).contains(c));
|
||||
}
|
||||
|
||||
private boolean isHangul(char c) {
|
||||
@@ -79,12 +86,24 @@ public class GameFontBase implements Font {
|
||||
return (Arrays.asList(runicList).contains(c));
|
||||
}
|
||||
|
||||
private int EFindexX(char c) {
|
||||
return (Arrays.asList(EFlist).indexOf(c) % 16);
|
||||
private boolean isExtA(char c) {
|
||||
return (c >= 0x100 && c < 0x180);
|
||||
}
|
||||
|
||||
private int EFindexY(char c) {
|
||||
return (Arrays.asList(EFlist).indexOf(c) / 16);
|
||||
private int asciiEFindexX(char c) {
|
||||
return (Arrays.asList(asciiEFList).indexOf(c) % 16);
|
||||
}
|
||||
|
||||
private int asciiEFindexY(char c) {
|
||||
return (Arrays.asList(asciiEFList).indexOf(c) / 16);
|
||||
}
|
||||
|
||||
private int extAEFindexX(char c) {
|
||||
return (Arrays.asList(extAEFList).indexOf(c) % 16);
|
||||
}
|
||||
|
||||
private int extAEFindexY(char c) {
|
||||
return (Arrays.asList(extAEFList).indexOf(c) / 16);
|
||||
}
|
||||
|
||||
private int runicIndexX(char c) {
|
||||
@@ -101,12 +120,12 @@ public class GameFontBase implements Font {
|
||||
for (int i = 0; i < s.length(); i++) {
|
||||
char c = s.charAt(i);
|
||||
switch (getSheetType(c)) {
|
||||
case SHEET_EF:
|
||||
len += W_EF; break;
|
||||
case SHEET_ASCII_EF:
|
||||
len += W_LATIN_NARROW; break;
|
||||
case SHEET_HANGUL:
|
||||
len += W_CJK_DRAW; break;
|
||||
default:
|
||||
len += W_EM;
|
||||
len += W_LATIN_WIDE;
|
||||
}
|
||||
}
|
||||
return len;
|
||||
@@ -153,7 +172,7 @@ public class GameFontBase implements Font {
|
||||
for (int i = 0; i < s.length(); i++) {
|
||||
char ch = s.charAt(i);
|
||||
|
||||
if (isAscii(ch)) {
|
||||
if (!isHangul(ch)) {
|
||||
|
||||
// if not init, enduse first
|
||||
if (prevInstance != -1) {
|
||||
@@ -165,11 +184,22 @@ public class GameFontBase implements Font {
|
||||
int sheetX;
|
||||
int sheetY;
|
||||
switch (prevInstance) {
|
||||
case SHEET_EF:
|
||||
sheetX = EFindexX(ch);
|
||||
sheetY = EFindexY(ch);
|
||||
case SHEET_ASCII_EF:
|
||||
sheetX = asciiEFindexX(ch);
|
||||
sheetY = asciiEFindexY(ch);
|
||||
break;
|
||||
case SHEET_EXTA_EF:
|
||||
sheetX = extAEFindexX(ch);
|
||||
sheetY = extAEFindexY(ch);
|
||||
break;
|
||||
case SHEET_RUNIC:
|
||||
sheetX = runicIndexX(ch);
|
||||
sheetY = runicIndexY(ch);
|
||||
break;
|
||||
case SHEET_EXTA_EM:
|
||||
sheetX = (ch - 0x100) % 16;
|
||||
sheetY = (ch - 0x100) / 16;
|
||||
break;
|
||||
case SHEET_EM:
|
||||
default:
|
||||
sheetX = ch % 16;
|
||||
sheetY = ch / 16;
|
||||
@@ -194,18 +224,12 @@ public class GameFontBase implements Font {
|
||||
}
|
||||
|
||||
private int getSheetType(char c) {
|
||||
if (isEF(c)) {
|
||||
return SHEET_EF;
|
||||
}
|
||||
else if (isHangul(c)) {
|
||||
return SHEET_HANGUL;
|
||||
}
|
||||
else if (isRunic(c)) {
|
||||
return SHEET_RUNIC;
|
||||
}
|
||||
else {
|
||||
return SHEET_EM;
|
||||
}
|
||||
if (isAsciiEF(c)) return SHEET_ASCII_EF;
|
||||
else if (isHangul(c)) return SHEET_HANGUL;
|
||||
else if (isRunic(c)) return SHEET_RUNIC;
|
||||
else if (isExtA(c)) return SHEET_EXTA_EM;
|
||||
else if (isExtAEF(c)) return SHEET_EXTA_EF;
|
||||
else return SHEET_ASCII_EM;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -13,24 +13,36 @@ public class GameFontBlack extends GameFontBase {
|
||||
|
||||
hangulSheet = new SpriteSheet(
|
||||
"./res/graphics/fonts/han_atlas_black.png"
|
||||
, W_CJK
|
||||
, H_CJK
|
||||
, W_CJK, H_CJK
|
||||
);
|
||||
asciiSheet = new SpriteSheet(
|
||||
"./res/graphics/fonts/ascii_majuscule_black.png"
|
||||
, W_EM
|
||||
, H
|
||||
, W_LATIN_WIDE, H
|
||||
);
|
||||
asciiSheetEF = new SpriteSheet(
|
||||
"./res/graphics/fonts/ascii_special_ef_black.png"
|
||||
, W_EF
|
||||
, H
|
||||
, W_LATIN_NARROW, H
|
||||
);
|
||||
runicSheet = new SpriteSheet(
|
||||
"./res/graphics/fonts/futhark_black.png"
|
||||
, W_LATIN_WIDE, H
|
||||
);
|
||||
extASheet = new SpriteSheet(
|
||||
"./res/graphics/fonts/LatinExtA_majuscule_black.png"
|
||||
, W_LATIN_WIDE, H
|
||||
);
|
||||
extASheetEF = new SpriteSheet(
|
||||
"./res/graphics/fonts/LatinExtA_ef_black.png"
|
||||
, W_LATIN_NARROW, H
|
||||
);
|
||||
|
||||
SpriteSheet[] shk = {
|
||||
asciiSheet
|
||||
, asciiSheetEF
|
||||
, hangulSheet
|
||||
, runicSheet
|
||||
, extASheet
|
||||
, extASheetEF
|
||||
};
|
||||
sheetKey = shk;
|
||||
}
|
||||
|
||||
@@ -1,12 +1,7 @@
|
||||
package com.Torvald.ImageFont;
|
||||
|
||||
import com.Torvald.Terrarum.MapDrawer.LightmapRenderer;
|
||||
import com.Torvald.Terrarum.Terrarum;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.newdawn.slick.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* Created by minjaesong on 16-01-20.
|
||||
*/
|
||||
@@ -17,24 +12,36 @@ public class GameFontWhite extends GameFontBase {
|
||||
|
||||
hangulSheet = new SpriteSheet(
|
||||
"./res/graphics/fonts/han_atlas.png"
|
||||
, W_CJK
|
||||
, H_CJK
|
||||
, W_CJK, H_CJK
|
||||
);
|
||||
asciiSheet = new SpriteSheet(
|
||||
"./res/graphics/fonts/ascii_majuscule.png"
|
||||
, W_EM
|
||||
, H
|
||||
, W_LATIN_WIDE, H
|
||||
);
|
||||
asciiSheetEF = new SpriteSheet(
|
||||
"./res/graphics/fonts/ascii_special_ef.png"
|
||||
, W_EF
|
||||
, H
|
||||
, W_LATIN_NARROW, H
|
||||
);
|
||||
runicSheet = new SpriteSheet(
|
||||
"./res/graphics/fonts/futhark.png"
|
||||
, W_LATIN_WIDE, H
|
||||
);
|
||||
extASheet = new SpriteSheet(
|
||||
"./res/graphics/fonts/LatinExtA_majuscule.png"
|
||||
, W_LATIN_WIDE, H
|
||||
);
|
||||
extASheetEF = new SpriteSheet(
|
||||
"./res/graphics/fonts/LatinExtA_ef.png"
|
||||
, W_LATIN_NARROW, H
|
||||
);
|
||||
|
||||
SpriteSheet[] shk = {
|
||||
asciiSheet
|
||||
, asciiSheetEF
|
||||
, hangulSheet
|
||||
, runicSheet
|
||||
, extASheet
|
||||
, extASheetEF
|
||||
};
|
||||
sheetKey = shk;
|
||||
}
|
||||
|
||||
@@ -1,41 +1,13 @@
|
||||
package com.Torvald.Terrarum.Actors;
|
||||
|
||||
import com.Torvald.Terrarum.KVHashtable;
|
||||
|
||||
import java.util.Hashtable;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Created by minjaesong on 16-01-03.
|
||||
*/
|
||||
public class ActorValue {
|
||||
|
||||
private Hashtable<String, Object> configTable;
|
||||
|
||||
public ActorValue() {
|
||||
configTable = new Hashtable<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add key-value pair to the configuration table.
|
||||
*
|
||||
* @param key case insensitive
|
||||
* @param value
|
||||
*/
|
||||
public void set(String key, Object value){
|
||||
configTable.put(key.toLowerCase(), value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get value using key from configuration table.
|
||||
*
|
||||
* @param key case insensitive
|
||||
* @return Object value
|
||||
*/
|
||||
public Object get(String key){
|
||||
return configTable.get(key.toLowerCase());
|
||||
}
|
||||
|
||||
public Set getKeySet() {
|
||||
return configTable.keySet();
|
||||
}
|
||||
public class ActorValue extends KVHashtable {
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.Torvald.Terrarum.Actors;
|
||||
|
||||
import com.Torvald.Rand.HighQualityRandom;
|
||||
import com.Torvald.Terrarum.Game;
|
||||
import com.Torvald.Terrarum.MapDrawer.MapDrawer;
|
||||
import com.Torvald.Terrarum.Terrarum;
|
||||
import com.Torvald.spriteAnimation.SpriteAnimation;
|
||||
@@ -65,8 +64,8 @@ public class ActorWithBody implements Actor, Visible, Glowing {
|
||||
* meter to pixel : 24/FPS
|
||||
*/
|
||||
private final float METER = 24f;
|
||||
private final float SI_TO_GAME_ACC = METER / (Terrarum.game.TARGET_FPS * Terrarum.game.TARGET_FPS);
|
||||
private final float SI_TO_GAME_VEL = METER / Terrarum.game.TARGET_FPS;
|
||||
private final float SI_TO_GAME_ACC = METER / (Terrarum.TARGET_FPS * Terrarum.TARGET_FPS);
|
||||
private final float SI_TO_GAME_VEL = METER / Terrarum.TARGET_FPS;
|
||||
private float gravitation;
|
||||
private final float DRAG_COEFF = 1f;
|
||||
|
||||
|
||||
@@ -50,6 +50,8 @@ public class PBFSigrid {
|
||||
p.actorValue.set("strength", 1250);
|
||||
p.actorValue.set("encumbrance", 1000);
|
||||
|
||||
p.actorValue.set("name", "Sigrid");
|
||||
|
||||
p.setHitboxDimension(20, 47, 7, 0);
|
||||
|
||||
p.inventory = new ActorInventory((int) p.actorValue.get("encumbrance"), true);
|
||||
|
||||
@@ -68,16 +68,16 @@ public class Player extends ActorWithBody implements Controllable, Pocketed {
|
||||
}
|
||||
|
||||
private void updatePhysicalInfos() {
|
||||
super.setScale((float) actorValue.get("scale"));
|
||||
super.setMass((float) actorValue.get("basemass")
|
||||
super.setScale(actorValue.getAsFloat("scale"));
|
||||
super.setMass(actorValue.getAsFloat("basemass")
|
||||
* FastMath.pow(super.getScale(), 3));
|
||||
}
|
||||
|
||||
private void walkHorizontal(boolean left) {
|
||||
readonly_totalX = super.getVeloX()
|
||||
+
|
||||
(float) actorValue.get("accel")
|
||||
* (float) actorValue.get("accelmult")
|
||||
actorValue.getAsFloat("accel")
|
||||
* actorValue.getAsFloat("accelmult")
|
||||
* FastMath.sqrt(super.getScale())
|
||||
* applyAccelRealism(walkPowerCounter)
|
||||
* (left ? -1 : 1);
|
||||
@@ -91,8 +91,8 @@ public class Player extends ActorWithBody implements Controllable, Pocketed {
|
||||
// Clamp veloX
|
||||
super.setVeloX(
|
||||
absClamp(super.getVeloX()
|
||||
, (float) actorValue.get("speed")
|
||||
* (float) actorValue.get("speedmult")
|
||||
, actorValue.getAsFloat("speed")
|
||||
* actorValue.getAsFloat("speedmult")
|
||||
* FastMath.sqrt(super.getScale())
|
||||
));
|
||||
|
||||
@@ -133,8 +133,8 @@ public class Player extends ActorWithBody implements Controllable, Pocketed {
|
||||
private void walkVertical(boolean up) {
|
||||
super.setVeloY(super.getVeloY()
|
||||
+
|
||||
(float) actorValue.get("accel")
|
||||
* (float) actorValue.get("accelmult")
|
||||
actorValue.getAsFloat("accel")
|
||||
* actorValue.getAsFloat("accelmult")
|
||||
* FastMath.sqrt(super.getScale())
|
||||
* applyAccelRealism(walkPowerCounter)
|
||||
* (up ? -1 : 1)
|
||||
@@ -147,8 +147,8 @@ public class Player extends ActorWithBody implements Controllable, Pocketed {
|
||||
// Clamp veloX
|
||||
super.setVeloY(
|
||||
absClamp(super.getVeloY()
|
||||
, (float) actorValue.get("speed")
|
||||
* (float) actorValue.get("speedmult")
|
||||
, actorValue.getAsFloat("speed")
|
||||
* actorValue.getAsFloat("speedmult")
|
||||
* FastMath.sqrt(super.getScale())
|
||||
)
|
||||
);
|
||||
@@ -158,8 +158,8 @@ public class Player extends ActorWithBody implements Controllable, Pocketed {
|
||||
if (super.getVeloX() > 0) {
|
||||
super.setVeloX(super.getVeloX()
|
||||
-
|
||||
(float) actorValue.get("accel")
|
||||
* (float) actorValue.get("accelmult")
|
||||
actorValue.getAsFloat("accel")
|
||||
* actorValue.getAsFloat("accelmult")
|
||||
* FastMath.sqrt(super.getScale())
|
||||
);
|
||||
|
||||
@@ -170,8 +170,8 @@ public class Player extends ActorWithBody implements Controllable, Pocketed {
|
||||
else if (super.getVeloX() < 0) {
|
||||
super.setVeloX(super.getVeloX()
|
||||
+
|
||||
(float) actorValue.get("accel")
|
||||
* (float) actorValue.get("accelmult")
|
||||
actorValue.getAsFloat("accel")
|
||||
* actorValue.getAsFloat("accelmult")
|
||||
* FastMath.sqrt(super.getScale())
|
||||
);
|
||||
|
||||
@@ -191,7 +191,7 @@ public class Player extends ActorWithBody implements Controllable, Pocketed {
|
||||
super.setVeloY(super.getVeloY()
|
||||
-
|
||||
WALK_STOP_ACCEL
|
||||
* (float) actorValue.get("accelmult")
|
||||
* actorValue.getAsFloat("accelmult")
|
||||
* FastMath.sqrt(super.getScale())
|
||||
);
|
||||
|
||||
@@ -203,7 +203,7 @@ public class Player extends ActorWithBody implements Controllable, Pocketed {
|
||||
super.setVeloY(super.getVeloY()
|
||||
+
|
||||
WALK_STOP_ACCEL
|
||||
* (float) actorValue.get("accelmult")
|
||||
* actorValue.getAsFloat("accelmult")
|
||||
* FastMath.sqrt(super.getScale())
|
||||
);
|
||||
|
||||
@@ -342,8 +342,8 @@ public class Player extends ActorWithBody implements Controllable, Pocketed {
|
||||
}
|
||||
|
||||
private void jump() {
|
||||
float len = (float) actorValue.get("jumplength");
|
||||
float pwr = (float) actorValue.get("jumppower");
|
||||
float len = actorValue.getAsFloat("jumplength");
|
||||
float pwr = actorValue.getAsFloat("jumppower");
|
||||
|
||||
//if (jumping) {
|
||||
// // Limit increment of jumpPowerCounter
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
package com.Torvald.Terrarum.ConsoleCommand;
|
||||
|
||||
import com.Torvald.Terrarum.Game;
|
||||
import com.Torvald.Terrarum.LangPack.Lang;
|
||||
import com.Torvald.Terrarum.UserInterface.ConsoleWindow;
|
||||
|
||||
import java.util.Formatter;
|
||||
|
||||
/**
|
||||
* Created by minjaesong on 16-01-16.
|
||||
*/
|
||||
@@ -18,7 +21,14 @@ public class CodexEdictis implements ConsoleCommand {
|
||||
commandObj.printUsage();
|
||||
}
|
||||
catch (NullPointerException e) {
|
||||
new Echo().execute("Codex: Unknown command: " + args[1]);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
Formatter formatter = new Formatter(sb);
|
||||
|
||||
new Echo().execute("Codex: "
|
||||
+ formatter.format(Lang.get("DEV_MESSAGE_CONSOLE_COMMAND_UNKNOWN")
|
||||
, args[1]
|
||||
).toString()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -33,13 +43,8 @@ public class CodexEdictis implements ConsoleCommand {
|
||||
|
||||
private void printList() {
|
||||
Echo echo = new Echo();
|
||||
echo.execute("Available commands");
|
||||
echo.execute("--------------------------------");
|
||||
|
||||
CommandDict.dict.keySet().forEach((s) -> echo.execute(s));
|
||||
|
||||
|
||||
echo.execute("--------------------------------");
|
||||
echo.execute(Lang.get("DEV_MESSAGE_CONSOLE_AVAILABLE_COMMANDS"));
|
||||
CommandDict.dict.keySet().forEach((s) -> echo.execute("] " + s));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
package com.Torvald.Terrarum.ConsoleCommand;
|
||||
|
||||
import com.Torvald.Terrarum.Game;
|
||||
import com.Torvald.Terrarum.UserInterface.ConsoleWindow;
|
||||
import com.Torvald.Terrarum.LangPack.Lang;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Formatter;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* Created by minjaesong on 16-01-15.
|
||||
@@ -17,41 +21,70 @@ public class CommandInterpreter {
|
||||
commandObj.execute(single_command.toStringArray());
|
||||
}
|
||||
catch (NullPointerException e) {
|
||||
new Echo().execute("Unknown command: " + single_command.getName());
|
||||
StringBuilder sb = new StringBuilder();
|
||||
Formatter formatter = new Formatter(sb);
|
||||
|
||||
new Echo().execute(
|
||||
formatter.format(Lang.get("DEV_MESSAGE_CONSOLE_COMMAND_UNKNOWN")
|
||||
, single_command.getName()
|
||||
).toString()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static CommandInput[] parse(String input) {
|
||||
String[] commands = input.split(";[ ]?"); // split multiple commands (e.g. respawn player; setav player speed 5)
|
||||
Pattern patternCommands = Pattern.compile("[^;]+");
|
||||
Pattern patternTokensInCommand = Pattern.compile("[\"'][^;]+[\"']|[^ ]+");
|
||||
|
||||
ArrayList<String> commands = new ArrayList<>();
|
||||
|
||||
// split multiple commands
|
||||
Matcher m = patternCommands.matcher(input);
|
||||
while (m.find()) commands.add(m.group());
|
||||
|
||||
// split command tokens from a command
|
||||
CommandInput[] parsedCommands = new CommandInput[commands.size()];
|
||||
|
||||
|
||||
for (int i = 0; i < parsedCommands.length; i++) {
|
||||
ArrayList<String> tokens = new ArrayList<>();
|
||||
|
||||
m = patternTokensInCommand.matcher(commands.get(i));
|
||||
while (m.find()) {
|
||||
String regexGroup = m.group().replaceAll("[\"\']", "");
|
||||
tokens.add(regexGroup);
|
||||
}
|
||||
|
||||
// create new command
|
||||
parsedCommands[i] = new CommandInput(tokens.toArray());
|
||||
|
||||
CommandInput[] ret = new CommandInput[commands.length];
|
||||
for (int i = 0; i < commands.length; i++) {
|
||||
ret[i] = new CommandInput(commands[i].split(" "));
|
||||
}
|
||||
|
||||
return ret;
|
||||
return parsedCommands;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class CommandInput {
|
||||
private String[] args;
|
||||
private int argsCount = 0;
|
||||
private String[] tokens;
|
||||
|
||||
CommandInput(String[] s) {
|
||||
args = s;
|
||||
CommandInput(Object[] o) {
|
||||
tokens = new String[o.length];
|
||||
for (int i = 0; i < o.length; i++) {
|
||||
tokens[i] = (String) o[i];
|
||||
}
|
||||
}
|
||||
|
||||
String[] toStringArray() {
|
||||
return args;
|
||||
return tokens;
|
||||
}
|
||||
|
||||
String getName() {
|
||||
return args[0];
|
||||
return tokens[0];
|
||||
}
|
||||
|
||||
int getArgsCount() {
|
||||
return argsCount;
|
||||
return tokens.length;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,13 +25,11 @@ class SetAV implements ConsoleCommand {
|
||||
printUsage();
|
||||
}
|
||||
else if (args.length == 3) {
|
||||
float val;
|
||||
try {
|
||||
val = new Float(args[2]);
|
||||
}
|
||||
Object val;
|
||||
|
||||
try { val = new Float(args[2]); } // try for number
|
||||
catch (NumberFormatException e) {
|
||||
new Echo().execute("Wrong number input.");
|
||||
return;
|
||||
val = new String(args[2]); // string if not number
|
||||
}
|
||||
|
||||
Terrarum.game.getPlayer().getActorValue().set(args[1], val);
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package com.Torvald.Terrarum;
|
||||
|
||||
import com.Torvald.ImageFont.GameFontWhite;
|
||||
import com.Torvald.Rand.HighQualityRandom;
|
||||
import com.Torvald.Terrarum.Actors.*;
|
||||
import com.Torvald.Terrarum.ConsoleCommand.CommandDict;
|
||||
import com.Torvald.Terrarum.GameControl.GameController;
|
||||
@@ -32,13 +30,6 @@ import java.util.LinkedList;
|
||||
*/
|
||||
public class Game extends BasicGameState {
|
||||
|
||||
public static final int TARGET_FPS = 50;
|
||||
/**
|
||||
* To be used with render, to achieve smooth frame drawing
|
||||
*
|
||||
* TARGET_INTERNAL_FPS > TARGET_FPS for smooth frame drawing
|
||||
*/
|
||||
public static final int TARGET_INTERNAL_FPS = 100;
|
||||
public static long memInUse;
|
||||
public static long totalVMMem;
|
||||
int game_mode = 0;
|
||||
@@ -76,7 +67,7 @@ public class Game extends BasicGameState {
|
||||
|
||||
|
||||
gameConfig = new GameConfig();
|
||||
gameConfig.addKey("smoothlighting", true);
|
||||
gameConfig.set("smoothlighting", true);
|
||||
|
||||
shader12BitCol = Shader.makeShader("./res/4096.vrt", "./res/4096.frg");
|
||||
shaderBlurH = Shader.makeShader("./res/blurH.vrt", "./res/blur.frg");
|
||||
@@ -177,7 +168,7 @@ public class Game extends BasicGameState {
|
||||
Terrarum.appgc.setTitle(
|
||||
"Simple Slick Game — FPS: "
|
||||
+ Terrarum.appgc.getFPS() + " ("
|
||||
+ String.valueOf(TARGET_INTERNAL_FPS)
|
||||
+ String.valueOf(Terrarum.TARGET_INTERNAL_FPS)
|
||||
+ ") — "
|
||||
+ String.valueOf(memInUse) + "M / "
|
||||
+ String.valueOf(totalVMMem) + "M"
|
||||
|
||||
@@ -5,31 +5,6 @@ import java.util.Hashtable;
|
||||
/**
|
||||
* Created by minjaesong on 15-12-30.
|
||||
*/
|
||||
public class GameConfig {
|
||||
public class GameConfig extends KVHashtable{
|
||||
|
||||
private Hashtable<String, Object> configTable;
|
||||
|
||||
public GameConfig() {
|
||||
this.configTable = new Hashtable<String, Object>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add key-value pair to the configuration table.
|
||||
*
|
||||
* @param key
|
||||
* @param value
|
||||
*/
|
||||
public void addKey(String key, Object value){
|
||||
configTable.put(key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get value using key from configuration table.
|
||||
*
|
||||
* @param key
|
||||
* @return Object value
|
||||
*/
|
||||
public Object get(String key){
|
||||
return configTable.get(key);
|
||||
}
|
||||
}
|
||||
|
||||
55
src/com/Torvald/Terrarum/KVHashtable.java
Normal file
55
src/com/Torvald/Terrarum/KVHashtable.java
Normal file
@@ -0,0 +1,55 @@
|
||||
package com.Torvald.Terrarum;
|
||||
|
||||
import java.util.Hashtable;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Created by minjaesong on 15-12-30.
|
||||
*/
|
||||
public class KVHashtable {
|
||||
|
||||
private Hashtable<String, Object> hashtable;
|
||||
|
||||
public KVHashtable() {
|
||||
hashtable = new Hashtable<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add key-value pair to the configuration table.
|
||||
* If key does not exist on the table, new key will be generated.
|
||||
* If key already exists, the value will be overwritten.
|
||||
*
|
||||
* @param key case insensitive
|
||||
* @param value
|
||||
*/
|
||||
public void set(String key, Object value){
|
||||
hashtable.put(key.toLowerCase(), value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get value using key from configuration table.
|
||||
*
|
||||
* @param key case insensitive
|
||||
* @return Object value
|
||||
*/
|
||||
public Object get(String key){
|
||||
return hashtable.get(key.toLowerCase());
|
||||
}
|
||||
|
||||
public float getAsFloat(String key) {
|
||||
return (float) get(key);
|
||||
}
|
||||
|
||||
public String getAsString(String key) {
|
||||
return (String) get(key);
|
||||
}
|
||||
|
||||
public boolean getAsBoolean(String key) {
|
||||
return (boolean) get(key);
|
||||
}
|
||||
|
||||
public Set getKeySet() {
|
||||
return hashtable.keySet();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -12,15 +12,24 @@ import java.util.Properties;
|
||||
public class Lang {
|
||||
|
||||
private static Properties lang;
|
||||
private static Properties langFallback;
|
||||
private static final String FALLBACK_LANG_CODE = "en";
|
||||
|
||||
public Lang() throws IOException {
|
||||
lang = new Properties();
|
||||
lang.load(new BufferedReader(new InputStreamReader(new FileInputStream(
|
||||
"res/locales/" + Terrarum.gameLocale + ".lang"), StandardCharsets.UTF_8)));
|
||||
|
||||
langFallback = new Properties();
|
||||
langFallback.load(new BufferedReader(new InputStreamReader(new FileInputStream(
|
||||
"res/locales/" + FALLBACK_LANG_CODE + ".lang"), StandardCharsets.UTF_8)));
|
||||
}
|
||||
|
||||
public static String get(String key) {
|
||||
return lang.getProperty(key, key);
|
||||
return lang.getProperty(key
|
||||
,langFallback.getProperty(key
|
||||
, key)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,13 +2,10 @@ package com.Torvald.Terrarum;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.management.ManagementFactory;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.Torvald.ImageFont.GameFontWhite;
|
||||
import com.Torvald.Terrarum.GameControl.GameController;
|
||||
import com.Torvald.Terrarum.GameControl.KeyMap;
|
||||
import com.Torvald.Terrarum.LangPack.Lang;
|
||||
import org.newdawn.slick.*;
|
||||
import org.newdawn.slick.state.StateBasedGame;
|
||||
@@ -18,6 +15,20 @@ import org.newdawn.slick.state.StateBasedGame;
|
||||
*/
|
||||
public class Terrarum extends StateBasedGame {
|
||||
|
||||
/**
|
||||
* To be used with physics simulator
|
||||
*/
|
||||
public static final int TARGET_FPS = 50;
|
||||
|
||||
/**
|
||||
* To be used with render, to achieve smooth frame drawing
|
||||
*
|
||||
* TARGET_INTERNAL_FPS > TARGET_FPS for smooth frame drawing
|
||||
*
|
||||
* Must choose a value so that 1000 / VAL is still integer
|
||||
*/
|
||||
public static final int TARGET_INTERNAL_FPS = 100;
|
||||
|
||||
public static AppGameContainer appgc;
|
||||
public static final int WIDTH = 960;
|
||||
public static final int HEIGHT = 720;
|
||||
@@ -64,11 +75,11 @@ public class Terrarum extends StateBasedGame {
|
||||
{
|
||||
appgc = new AppGameContainer(new Terrarum("Terrarum"));
|
||||
appgc.setDisplayMode(WIDTH, HEIGHT, false);
|
||||
appgc.setTargetFrameRate(Game.TARGET_INTERNAL_FPS);
|
||||
appgc.setTargetFrameRate(TARGET_INTERNAL_FPS);
|
||||
appgc.setVSync(true);
|
||||
appgc.setShowFPS(false);
|
||||
appgc.setUpdateOnlyWhenVisible(false);
|
||||
appgc.setMaximumLogicUpdateInterval(1000 / Game.TARGET_INTERNAL_FPS);
|
||||
appgc.setMaximumLogicUpdateInterval(1000 / TARGET_INTERNAL_FPS);
|
||||
appgc.start();
|
||||
}
|
||||
catch (SlickException ex)
|
||||
|
||||
Reference in New Issue
Block a user