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:
Song Minjae
2016-02-10 21:27:50 +09:00
parent 954076d944
commit 224ba8f6be
63 changed files with 1163 additions and 482 deletions

View File

@@ -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;
}