mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-10 05:41:51 +09:00
added sources for Slick
Former-commit-id: 1647fa32ef6894bd7db44f741f07c2f4dcdf9054 Former-commit-id: 0e5810dcfbe1fd59b13e7cabe9f1e93c5542da2d
This commit is contained in:
111
lib/slick-source/org/newdawn/slick/SpriteSheetFont.java
Normal file
111
lib/slick-source/org/newdawn/slick/SpriteSheetFont.java
Normal file
@@ -0,0 +1,111 @@
|
||||
package org.newdawn.slick;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
|
||||
import org.newdawn.slick.util.Log;
|
||||
|
||||
/**
|
||||
* A font implementation that will use the graphics inside a SpriteSheet for its data.
|
||||
* This is useful when your font has a fixed width and height for each character as
|
||||
* opposed to the more complex AngelCodeFont that allows different sizes and kerning
|
||||
* for each character.
|
||||
*
|
||||
* @author Onno Scheffers
|
||||
*/
|
||||
public class SpriteSheetFont implements Font {
|
||||
/** The SpriteSheet containing the bitmap font */
|
||||
private SpriteSheet font;
|
||||
/** First character in the SpriteSheet */
|
||||
private char startingCharacter;
|
||||
/** Width of each character in pixels */
|
||||
private int charWidth;
|
||||
/** Height of each character in pixels */
|
||||
private int charHeight;
|
||||
/** Number of characters in SpriteSheet horizontally */
|
||||
private int horizontalCount;
|
||||
/** Total number of characters in SpriteSheet */
|
||||
private int numChars;
|
||||
|
||||
/**
|
||||
* Create a new font based on a SpriteSheet. The SpriteSheet should hold your
|
||||
* fixed-width character set in ASCII order. To only get upper-case characters
|
||||
* working you would usually set up a SpriteSheet with characters for these values:
|
||||
* <pre>
|
||||
* !"#$%&'()*+,-./
|
||||
* 0123456789:;<=>?
|
||||
* @ABCDEFGHIJKLMNO
|
||||
* PQRSTUVWXYZ[\]^_<pre>
|
||||
* In this set, ' ' (SPACE) would be the startingCharacter of your characterSet.
|
||||
*
|
||||
* @param font The SpriteSheet holding the font data.
|
||||
* @param startingCharacter The first character that is defined in the SpriteSheet.
|
||||
*/
|
||||
public SpriteSheetFont(SpriteSheet font, char startingCharacter) {
|
||||
this.font = font;
|
||||
this.startingCharacter = startingCharacter;
|
||||
horizontalCount = font.getHorizontalCount();
|
||||
int verticalCount = font.getVerticalCount();
|
||||
charWidth = font.getWidth() / horizontalCount;
|
||||
charHeight = font.getHeight() / verticalCount;
|
||||
numChars = horizontalCount * verticalCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.newdawn.slick.Font#drawString(float, float, java.lang.String)
|
||||
*/
|
||||
public void drawString(float x, float y, String text) {
|
||||
drawString(x, y, text, Color.white);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.newdawn.slick.Font#drawString(float, float, java.lang.String, org.newdawn.slick.Color)
|
||||
*/
|
||||
public void drawString(float x, float y, String text, Color col) {
|
||||
drawString(x,y,text,col,0,text.length()-1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Font#drawString(float, float, String, Color, int, int)
|
||||
*/
|
||||
public void drawString(float x, float y, String text, Color col, int startIndex, int endIndex) {
|
||||
try {
|
||||
byte[] data = text.getBytes("US-ASCII");
|
||||
for (int i = 0; i < data.length; i++) {
|
||||
int index = data[i] - startingCharacter;
|
||||
if (index < numChars) {
|
||||
int xPos = (index % horizontalCount);
|
||||
int yPos = (index / horizontalCount);
|
||||
|
||||
if ((i >= startIndex) || (i <= endIndex)) {
|
||||
font.getSprite(xPos, yPos)
|
||||
.draw(x + (i * charWidth), y, col);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
// Should never happen, ASCII is supported pretty much anywhere
|
||||
Log.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.newdawn.slick.Font#getHeight(java.lang.String)
|
||||
*/
|
||||
public int getHeight(String text) {
|
||||
return charHeight;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.newdawn.slick.Font#getWidth(java.lang.String)
|
||||
*/
|
||||
public int getWidth(String text) {
|
||||
return charWidth * text.length();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.newdawn.slick.Font#getLineHeight()
|
||||
*/
|
||||
public int getLineHeight() {
|
||||
return charHeight;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user