mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-08 04:41:51 +09:00
ground hit detection and adjust player position accordingly (it's working at least)
Former-commit-id: be639eeeac82b35aae145540ede5e0b1f3b02d01 Former-commit-id: 4d214a5160cd80955909da238c3991ede5488ca6
This commit is contained in:
@@ -15,6 +15,8 @@ public class GameFontBase implements Font {
|
||||
static SpriteSheet runicSheet;
|
||||
static SpriteSheet extASheet;
|
||||
static SpriteSheet extASheetEF;
|
||||
static SpriteSheet kanaSheet;
|
||||
static SpriteSheet cjkPunct;
|
||||
|
||||
static final int JUNG_COUNT = 21;
|
||||
static final int JONG_COUNT = 28;
|
||||
@@ -24,7 +26,8 @@ public class GameFontBase implements Font {
|
||||
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 H_HANGUL = 16;
|
||||
static final int H_KANA = 20;
|
||||
|
||||
static final int SHEET_ASCII_EM = 0;
|
||||
static final int SHEET_ASCII_EF = 1;
|
||||
@@ -32,6 +35,8 @@ public class GameFontBase implements Font {
|
||||
static final int SHEET_RUNIC = 3;
|
||||
static final int SHEET_EXTA_EM = 4;
|
||||
static final int SHEET_EXTA_EF = 5;
|
||||
static final int SHEET_KANA = 6;
|
||||
static final int SHEET_CJK_PUNCT = 7;
|
||||
|
||||
static SpriteSheet[] sheetKey;
|
||||
static final Character[] asciiEFList = {
|
||||
@@ -47,12 +52,20 @@ public class GameFontBase implements Font {
|
||||
* Runic letters list used for game. The set is
|
||||
* Younger Futhark + Medieval rune 'e' + Punct + Runic Almanac
|
||||
*
|
||||
* BEWARE OF SIMILAR-LOOKING RUNES, especially:
|
||||
*
|
||||
* * Algiz ᛉ instead of Maðr ᛘ
|
||||
*
|
||||
* * Short-Twig Hagall ᚽ instead of Runic Letter E ᛂ
|
||||
*
|
||||
* * Runic Letter OE ᚯ instead of Óss ᚬ
|
||||
*
|
||||
* Examples:
|
||||
* ᛭ᛋᛁᚴᚱᛁᚦᛦ᛭
|
||||
* ᛭ᛂᛚᛋᛅ᛭ᛏᚱᚢᛏᚾᛁᚾᚴᚢᚾᛅ᛬ᛅᚱᚾᛅᛏᛅᛚᛋ
|
||||
*/
|
||||
static final Character[] runicList = {
|
||||
'ᚠ','ᚢ','ᚦ','ᚯ','ᚱ','ᚴ','ᚼ','ᚾ','ᛁ','ᛅ','ᛋ','ᛏ','ᛒ','ᛘ','ᛚ','ᛦ'
|
||||
'ᚠ','ᚢ','ᚦ','ᚬ','ᚱ','ᚴ','ᚼ','ᚾ','ᛁ','ᛅ','ᛋ','ᛏ','ᛒ','ᛘ','ᛚ','ᛦ'
|
||||
,'ᛂ','᛬','᛫','᛭','ᛮ','ᛯ','ᛰ'
|
||||
};
|
||||
|
||||
@@ -90,6 +103,14 @@ public class GameFontBase implements Font {
|
||||
return (c >= 0x100 && c < 0x180);
|
||||
}
|
||||
|
||||
private boolean isKana(char c) {
|
||||
return (c >= 0x3040 && c < 0x3100);
|
||||
}
|
||||
|
||||
private boolean isCJKPunct(char c) {
|
||||
return (c >= 0x3000 && c < 0x3040);
|
||||
}
|
||||
|
||||
private int asciiEFindexX(char c) {
|
||||
return (Arrays.asList(asciiEFList).indexOf(c) % 16);
|
||||
}
|
||||
@@ -114,6 +135,22 @@ public class GameFontBase implements Font {
|
||||
return (Arrays.asList(runicList).indexOf(c) / 16);
|
||||
}
|
||||
|
||||
private int kanaIndexX(char c) {
|
||||
return (c - 0x3040) % 16;
|
||||
}
|
||||
|
||||
private int kanaIndexY(char c) {
|
||||
return (c - 0x3040) / 16;
|
||||
}
|
||||
|
||||
private int cjkPunctIndexX(char c) {
|
||||
return (c - 0x3000) % 16;
|
||||
}
|
||||
|
||||
private int cjkPunctIndexY(char c) {
|
||||
return (c - 0x3000) / 16;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWidth(String s) {
|
||||
int len = 0;
|
||||
@@ -122,7 +159,7 @@ public class GameFontBase implements Font {
|
||||
switch (getSheetType(c)) {
|
||||
case SHEET_ASCII_EF:
|
||||
len += W_LATIN_NARROW; break;
|
||||
case SHEET_HANGUL:
|
||||
case SHEET_HANGUL: case SHEET_KANA: case SHEET_CJK_PUNCT:
|
||||
len += W_CJK_DRAW; break;
|
||||
default:
|
||||
len += W_LATIN_WIDE;
|
||||
@@ -159,7 +196,7 @@ public class GameFontBase implements Font {
|
||||
Math.round(x
|
||||
+ getWidth(s.substring(0, i))
|
||||
)
|
||||
, Math.round((H - H_CJK) + y)
|
||||
, Math.round((H - H_HANGUL) / 2 + y + 1)
|
||||
, hanPos[0]
|
||||
, hanPos[1]
|
||||
);
|
||||
@@ -200,20 +237,37 @@ public class GameFontBase implements Font {
|
||||
sheetX = (ch - 0x100) % 16;
|
||||
sheetY = (ch - 0x100) / 16;
|
||||
break;
|
||||
case SHEET_KANA:
|
||||
sheetX = kanaIndexX(ch);
|
||||
sheetY = kanaIndexY(ch);
|
||||
break;
|
||||
case SHEET_CJK_PUNCT:
|
||||
sheetX = cjkPunctIndexX(ch);
|
||||
sheetY = cjkPunctIndexY(ch);
|
||||
break;
|
||||
default:
|
||||
sheetX = ch % 16;
|
||||
sheetY = ch / 16;
|
||||
break;
|
||||
}
|
||||
|
||||
sheetKey[prevInstance].renderInUse(
|
||||
Math.round(x
|
||||
+ getWidth(s.substring(0, i))
|
||||
)
|
||||
, Math.round(y)
|
||||
, sheetX
|
||||
, sheetY
|
||||
);
|
||||
try {
|
||||
sheetKey[prevInstance].renderInUse(
|
||||
Math.round(x
|
||||
+ getWidth(s.substring(0, i))
|
||||
)
|
||||
, Math.round(y)
|
||||
, sheetX
|
||||
, sheetY
|
||||
);
|
||||
}
|
||||
catch (ArrayIndexOutOfBoundsException e) {
|
||||
System.out.println("char: '" + ch + "' (" + String.valueOf((int) ch) + ")");
|
||||
System.out.println("sheet: " + prevInstance);
|
||||
System.out.println("sheetX: " + sheetX);
|
||||
System.out.println("sheetY: " + sheetY);
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -229,6 +283,8 @@ public class GameFontBase implements Font {
|
||||
else if (isRunic(c)) return SHEET_RUNIC;
|
||||
else if (isExtA(c)) return SHEET_EXTA_EM;
|
||||
else if (isExtAEF(c)) return SHEET_EXTA_EF;
|
||||
else if (isKana(c)) return SHEET_KANA;
|
||||
else if (isCJKPunct(c)) return SHEET_CJK_PUNCT;
|
||||
else return SHEET_ASCII_EM;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user