clean up 'n bugcrushing
This commit is contained in:
@@ -15,19 +15,18 @@ import control.joystick.JoystickListener;
|
||||
public class GameControl implements JoystickListener, ButtonListener, ActionListener {
|
||||
|
||||
private long lastTime = System.currentTimeMillis();
|
||||
GameModel model;
|
||||
GameView view;
|
||||
GameStateManager gsm;
|
||||
Timer update;
|
||||
private GameModel model;
|
||||
private GameView view;
|
||||
private GameStateManager gsm;
|
||||
private Timer update;
|
||||
|
||||
public GameControl(final GameModel model, final GameView view,GameStateManager gsm)
|
||||
{
|
||||
public GameControl(final GameModel model, final GameView view,GameStateManager gsm) {
|
||||
this.model = model;
|
||||
this.view = view;
|
||||
this.gsm = gsm;
|
||||
|
||||
view.setIgnoreRepaint(true);
|
||||
update = new Timer(1000/60,this);
|
||||
update.start();
|
||||
(update = new Timer(1000/60,this)).start();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -20,12 +20,15 @@ import data.io.SQLConnector;
|
||||
public class GameStateManager {
|
||||
|
||||
private List<GameState> gamestates;
|
||||
public GameState currentState;
|
||||
private int index = 0;
|
||||
public int fps;
|
||||
private float timeOfNoAction = 0,maxTimeToHaveNoAction = 45000;
|
||||
|
||||
public GameState currentState;
|
||||
private SongHandler sh;
|
||||
|
||||
|
||||
private int index = 0;
|
||||
public int fps;
|
||||
private float timeOfNoAction = 0,
|
||||
maxTimeToHaveNoAction = 45000;
|
||||
|
||||
public enum State {
|
||||
TITLE_STATE,
|
||||
MENU_STATE,
|
||||
@@ -47,12 +50,10 @@ public class GameStateManager {
|
||||
{
|
||||
if (st.ordinal() > 0)
|
||||
currentState.stopAudio();
|
||||
|
||||
currentState = gamestates.get(st.ordinal());
|
||||
|
||||
init();
|
||||
// System.out.println("Current song: "+sh.getCurrentSongInstance());
|
||||
// sh.set(sh.getCurrentSongInstance());
|
||||
// sh.play();
|
||||
}
|
||||
|
||||
public void next() {
|
||||
|
||||
+15
-18
@@ -12,20 +12,20 @@ import control.joystick.Joystick.Position;
|
||||
import control.joystick.JoystickHandler;
|
||||
|
||||
public class NetworkHandler implements Runnable{
|
||||
|
||||
DatagramSocket udp;
|
||||
|
||||
String host;
|
||||
int port;
|
||||
|
||||
boolean running;
|
||||
Thread t;
|
||||
|
||||
byte[] send;
|
||||
byte[] receive;
|
||||
|
||||
ButtonHandler bth;
|
||||
JoystickHandler jth;
|
||||
|
||||
private DatagramSocket udp;
|
||||
|
||||
private String host;
|
||||
private int port;
|
||||
|
||||
private boolean running;
|
||||
private Thread t;
|
||||
|
||||
private byte[] send,
|
||||
receive;
|
||||
|
||||
private ButtonHandler bth;
|
||||
private JoystickHandler jth;
|
||||
|
||||
public NetworkHandler(String host, int port, ButtonHandler bth, JoystickHandler jth)
|
||||
{
|
||||
@@ -62,10 +62,7 @@ public class NetworkHandler implements Runnable{
|
||||
send(cmd);
|
||||
}
|
||||
|
||||
private void send(String str)
|
||||
{
|
||||
|
||||
}
|
||||
private void send(String str) { }
|
||||
|
||||
public void close()
|
||||
{
|
||||
|
||||
@@ -7,10 +7,10 @@ import control.NetworkHandler;
|
||||
|
||||
public class Button {
|
||||
|
||||
Color color;
|
||||
int ledID;
|
||||
int buttonID;
|
||||
NetworkHandler ntw;
|
||||
private Color color;
|
||||
private int ledID,
|
||||
buttonID;
|
||||
private NetworkHandler ntw;
|
||||
public int pressed;
|
||||
|
||||
public Button(int buttonID, int ledID, NetworkHandler ntw)
|
||||
|
||||
@@ -20,19 +20,15 @@ import control.NetworkHandler;
|
||||
|
||||
public class ButtonHandler implements KeyListener{
|
||||
|
||||
List<ButtonListener> listeners;
|
||||
static List<Button> buttons;
|
||||
NetworkHandler ntw;
|
||||
private List<ButtonListener> listeners;
|
||||
public static List<Button> buttons;
|
||||
private NetworkHandler ntw;
|
||||
|
||||
public ButtonHandler()
|
||||
{
|
||||
this.ntw = null;
|
||||
|
||||
listeners = new ArrayList<ButtonListener>();
|
||||
buttons = new ArrayList<Button>();
|
||||
|
||||
// if (Window.ON_RASP)
|
||||
// addGpioListeners();
|
||||
|
||||
}
|
||||
|
||||
@@ -48,7 +44,6 @@ public class ButtonHandler implements KeyListener{
|
||||
inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_12, "6"));
|
||||
inputpins.add(gpio.provisionDigitalInputPin(RaspiPin.GPIO_06, "0"));
|
||||
|
||||
|
||||
for(GpioPinDigitalInput p:inputpins){
|
||||
p.addListener(new GpioPinListenerDigital() {
|
||||
@Override
|
||||
@@ -82,12 +77,12 @@ public class ButtonHandler implements KeyListener{
|
||||
}
|
||||
|
||||
public void buttonRelease(Button b) {
|
||||
if(Window.ON_RASP)
|
||||
{
|
||||
if(Window.ON_RASP) {
|
||||
ntw.setLed(b.getLedID(), b.getColor().getGreen(), b.getColor().getRed(), b.getColor().getBlue());
|
||||
ntw.show();
|
||||
}
|
||||
ButtonEvent e = new ButtonEvent(b, System.currentTimeMillis());
|
||||
|
||||
for (ButtonListener bt : listeners)
|
||||
bt.buttonReleased(e);
|
||||
}
|
||||
@@ -161,12 +156,9 @@ public class ButtonHandler implements KeyListener{
|
||||
public static Button getButton(int id)
|
||||
{
|
||||
for(Button b : buttons)
|
||||
{
|
||||
if(b.getButtonID() == id)
|
||||
{
|
||||
return b;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -27,8 +27,7 @@ public class SQLConnector
|
||||
//Start connection with Database
|
||||
public SQLConnector(String host, String port, String dbName, String userName, String password)
|
||||
{
|
||||
try
|
||||
{
|
||||
try {
|
||||
String url = "jdbc:mysql://" + host + ":" + port + "/"+ dbName + "?user="
|
||||
+ userName
|
||||
+ "&password="
|
||||
@@ -36,8 +35,7 @@ public class SQLConnector
|
||||
Class.forName("com.mysql.jdbc.Driver").newInstance ();
|
||||
myConn = DriverManager.getConnection(url);
|
||||
}
|
||||
catch( SQLException ex)
|
||||
{
|
||||
catch( SQLException ex) {
|
||||
System.out.println("SQLException: " + ex.getMessage());
|
||||
System.out.println("SQLState: " + ex.getSQLState());
|
||||
System.out.println("VendorError: " + ex.getErrorCode());
|
||||
@@ -55,6 +53,7 @@ public class SQLConnector
|
||||
Statement st = executeResultQuery(query);
|
||||
ResultSet result = null;
|
||||
List<Highscore> hsc = new ArrayList<Highscore>();
|
||||
|
||||
try {
|
||||
result = st.getResultSet();
|
||||
} catch (SQLException e1) {
|
||||
@@ -62,9 +61,7 @@ public class SQLConnector
|
||||
}
|
||||
try {
|
||||
while(result.next())
|
||||
{
|
||||
hsc.add(new Highscore(si, result.getString("username"), result.getInt("score"), result.getDate("date").getTime()));
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@@ -131,7 +128,7 @@ public class SQLConnector
|
||||
rs.close();
|
||||
st.close();
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
System.out.println("Empty return set");
|
||||
}
|
||||
|
||||
if(id != -1)
|
||||
|
||||
@@ -23,7 +23,9 @@ import com.google.zxing.qrcode.QRCodeWriter;
|
||||
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
|
||||
|
||||
public class WebcamUploader {
|
||||
public static void takePictureAndUpload(int id) throws IOException{
|
||||
|
||||
public static void takePictureAndUpload(int id) throws IOException{
|
||||
|
||||
Runtime.getRuntime().exec("streamer -c /dev/video0 -b 16 -o" + System.getProperty( "user.home" ) + "/ColorStrike/picture.jpeg");
|
||||
|
||||
HttpURLConnection httpUrlConnection = (HttpURLConnection)new URL("http://178.62.254.153/colorstrike/images/photoupload.php?filename="+id+".jpeg").openConnection();
|
||||
|
||||
@@ -31,8 +31,7 @@ public class GameModel {
|
||||
|
||||
if (Window.ON_RASP) {
|
||||
count++;
|
||||
if(count>15)
|
||||
{
|
||||
if(count>15) {
|
||||
for (int i = 7; i < 54; i++) {
|
||||
ntw.setLed(i, c.getRed(), c.getGreen(), c.getBlue());
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ public class SongHandler {
|
||||
private Song currentSong;
|
||||
private SongInstance currentSongInstance;
|
||||
private int currentIndex;
|
||||
SQLConnector sql;
|
||||
private SQLConnector sql;
|
||||
|
||||
private File dir;
|
||||
|
||||
@@ -33,7 +33,6 @@ public class SongHandler {
|
||||
this.sql = sql;
|
||||
|
||||
songs = new ArrayList<Song>();
|
||||
|
||||
currentSong = null;
|
||||
currentSongInstance = null;
|
||||
currentIndex = 0;
|
||||
|
||||
@@ -5,10 +5,13 @@ import java.awt.geom.AffineTransform;
|
||||
|
||||
public abstract class DrawObject {
|
||||
|
||||
|
||||
protected AffineTransform transform;
|
||||
protected double width,height;
|
||||
|
||||
protected double width,
|
||||
height;
|
||||
|
||||
protected int index = 0;
|
||||
|
||||
public DrawObject() {
|
||||
transform = new AffineTransform();
|
||||
}
|
||||
@@ -20,8 +23,7 @@ public abstract class DrawObject {
|
||||
public void setIndex(int index){
|
||||
this.index = index;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public abstract void draw(Graphics2D g2);
|
||||
public abstract void update(float factor);
|
||||
}
|
||||
|
||||
@@ -29,31 +29,26 @@ public class Player extends DrawObject {
|
||||
}
|
||||
|
||||
public void draw(Graphics2D g2){//
|
||||
subImgX = (indexCursor % 8)*100;
|
||||
subImgY = (indexCursor / 8)*100;
|
||||
|
||||
subImgXBeat = (indexBeat % 9)*100;
|
||||
|
||||
|
||||
subImgX = (indexCursor % 8) * 100;
|
||||
subImgY = (indexCursor / 8) * 100;
|
||||
subImgXBeat = (indexBeat % 9 ) * 100;
|
||||
|
||||
BufferedImage subImg2 = pulse.getSubimage(subImgXBeat,0,100,100);
|
||||
g2.drawImage(subImg2, transform, null);
|
||||
|
||||
|
||||
|
||||
BufferedImage subImg = img.getSubimage(subImgX,subImgY,100,100);
|
||||
g2.drawImage(subImg, transform, null);
|
||||
|
||||
g2.drawImage(subImg, transform, null);
|
||||
}
|
||||
|
||||
public void update(float update){
|
||||
if(beat){
|
||||
indexBeat++;
|
||||
if(indexBeat >= 9)
|
||||
{
|
||||
if(indexBeat >= 9) {
|
||||
indexBeat = 0;
|
||||
beat = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
indexCursor++;
|
||||
indexCursor%=32;
|
||||
|
||||
@@ -68,7 +63,6 @@ public class Player extends DrawObject {
|
||||
public void setBeat() {
|
||||
beat = true;
|
||||
indexBeat = 0;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -29,11 +29,11 @@ import data.io.WebcamUploader;
|
||||
|
||||
public class GameOverState extends GameState {
|
||||
|
||||
BufferedImage gameOver = Images.getImage(Images.ImageType.gameover);
|
||||
VolatileImage background;
|
||||
Font textFont = new Font("OCR A Extended", Font.BOLD, 70);
|
||||
HighscoreName hsn;
|
||||
int image_x = 0;
|
||||
private BufferedImage gameOver = Images.getImage(Images.ImageType.gameover);
|
||||
private VolatileImage background;
|
||||
private Font textFont = new Font("OCR A Extended", Font.BOLD, 70);
|
||||
private HighscoreName hsn;
|
||||
private int image_x = 0;
|
||||
private boolean uploaded;
|
||||
private BufferedImage QRimage;
|
||||
|
||||
|
||||
@@ -18,6 +18,8 @@ public abstract class GameState {
|
||||
this.gsm = gsm;
|
||||
this.sh = sh;
|
||||
this.sql = sql;
|
||||
|
||||
int kleurButton1 = 0;
|
||||
}
|
||||
|
||||
public abstract void init();
|
||||
|
||||
@@ -49,6 +49,7 @@ public class MenuState extends GameState {
|
||||
|
||||
Font textFont = new Font("OCR A Extended", Font.BOLD, 50);
|
||||
Font textFontSmall = new Font("OCR A Extended", Font.BOLD, 15);
|
||||
Font textFont2 = new Font("OCR A Extended", Font.BOLD, 50);
|
||||
|
||||
BufferedImage aanwijzers = Images.getImage(ImageType.aanwijzers);
|
||||
|
||||
@@ -90,13 +91,11 @@ public class MenuState extends GameState {
|
||||
}
|
||||
@Override
|
||||
public void init() {
|
||||
if(subscreen)
|
||||
{
|
||||
if(subscreen) {
|
||||
ButtonHandler.getButton(1).setColor(GameModel.colors[0]);
|
||||
ButtonHandler.getButton(2).setColor(GameModel.colors[2]);
|
||||
generateSubScreenForeground();
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
ButtonHandler.getButton(1).setColor(GameModel.colors[0]);
|
||||
|
||||
ButtonHandler.getButton(5).setColor(GameModel.colors[1]);
|
||||
@@ -112,20 +111,14 @@ public class MenuState extends GameState {
|
||||
if(animationcounter == 5){
|
||||
startanimation = false;
|
||||
}
|
||||
}else if(subscreen){
|
||||
//nextScreen();
|
||||
}else{
|
||||
//previousScreen();
|
||||
}
|
||||
|
||||
if(selected != oldselected){
|
||||
for(int i = 0; i < buttons.size(); i++){
|
||||
for(int i = 0; i < buttons.size(); i++)
|
||||
buttons.get(i).setSong(selectedToSong(selected+(i-2)));
|
||||
|
||||
}
|
||||
oldselected = selected;
|
||||
}
|
||||
if(difSelect != oldDifSelect)
|
||||
{
|
||||
if(difSelect != oldDifSelect) {
|
||||
oldDifSelect = difSelect;
|
||||
generateSubScreenForeground();
|
||||
}
|
||||
@@ -143,10 +136,9 @@ public class MenuState extends GameState {
|
||||
buttons.add(new MenuButton(300,680,GameModel.colors[kleurButton4],selectedToSong(selected+1)));
|
||||
buttons.add(new MenuButton(300,800,GameModel.colors[kleurButton5],selectedToSong(selected+2)));
|
||||
buttons.get(2).setSelected(true);
|
||||
|
||||
|
||||
|
||||
g2.setColor(Color.BLACK);
|
||||
Font textFont2 = new Font("OCR A Extended", Font.BOLD, 50);
|
||||
|
||||
g2.setFont(textFont2);
|
||||
if(!subscreen) {
|
||||
g2.drawImage(mainScreenBackground, 0, 0, 1280,1024,null);
|
||||
@@ -244,33 +236,21 @@ public class MenuState extends GameState {
|
||||
|
||||
}else if(e.getJoystick().getPos() == Joystick.Position.UP){
|
||||
selected--;
|
||||
kleurButton1--;
|
||||
if(kleurButton1 < 0){
|
||||
kleurButton1 = 5;
|
||||
}
|
||||
|
||||
kleurButton2--;
|
||||
if(kleurButton2 < 0){
|
||||
kleurButton2 = 5;
|
||||
}
|
||||
|
||||
kleurButton3--;
|
||||
if(kleurButton3 < 0){
|
||||
kleurButton3 = 5;
|
||||
}
|
||||
|
||||
kleurButton4--;
|
||||
if(kleurButton4 < 0){
|
||||
kleurButton4 = 5;
|
||||
}
|
||||
|
||||
kleurButton5--;
|
||||
if(kleurButton5 < 0){
|
||||
kleurButton5 = 5;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(--kleurButton1 < 0)
|
||||
kleurButton1 = 5;
|
||||
|
||||
if(--kleurButton2 < 0)
|
||||
kleurButton2 = 5;
|
||||
|
||||
if(--kleurButton3 < 0)
|
||||
kleurButton3 = 5;
|
||||
|
||||
if(--kleurButton4 < 0)
|
||||
kleurButton4 = 5;
|
||||
|
||||
if(--kleurButton5 < 0)
|
||||
kleurButton5 = 5;
|
||||
}
|
||||
|
||||
else if(e.getJoystick().getPos() == Joystick.Position.CENTER)
|
||||
@@ -301,9 +281,9 @@ public class MenuState extends GameState {
|
||||
g2.setPaint(new GradientPaint(0, 0, new Color(0,0,1, 0.6f),1280,1024 ,new Color(0,0,1, 0.2f)));
|
||||
g2.fillRect(0, 0, 1280, 1024);
|
||||
g2.setPaint(new GradientPaint(0, 0, new Color(1,1,0, 0.6f),1280,1024 ,new Color(0,0,1, 0.2f)));
|
||||
|
||||
|
||||
Polygon triangle2 = new Polygon();
|
||||
|
||||
Polygon triangle2 = new Polygon();
|
||||
|
||||
triangle2.addPoint(0, 0);
|
||||
triangle2.addPoint(0, 1024/4+50);
|
||||
triangle2.addPoint(1280/2+50, 0);
|
||||
@@ -338,8 +318,6 @@ public class MenuState extends GameState {
|
||||
g2.dispose();
|
||||
|
||||
mainScreenBackground.createGraphics();
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void generateSubScreenBackground(){
|
||||
@@ -384,23 +362,18 @@ public class MenuState extends GameState {
|
||||
{
|
||||
highscores = sql.getHighscores(selectedToSong(selected), sh.getCurrentSong().getSongs().get(difSelect));
|
||||
if(highscores.isEmpty())
|
||||
{
|
||||
highscoresFound = false;
|
||||
}
|
||||
else
|
||||
g2.drawString("All Time Highscores", 30, 300);
|
||||
}
|
||||
else
|
||||
g2.drawString("Daily Highscore", 30, 300);
|
||||
|
||||
if(highscoresFound)
|
||||
{
|
||||
if(highscoresFound) {
|
||||
HIGHSCORES_TO_DISPLAY = HIGHSCORES_TO_DISPLAY > highscores.size() ? highscores.size() : HIGHSCORES_TO_DISPLAY;
|
||||
|
||||
for(int i = 0; i<HIGHSCORES_TO_DISPLAY; i++)
|
||||
{
|
||||
for(int i = 0; i<HIGHSCORES_TO_DISPLAY; i++) {
|
||||
Highscore hi = highscores.get(i);
|
||||
|
||||
g2.drawString(hi.getName() + " - " + hi.getScore(), 30, 400 + i*100);
|
||||
}
|
||||
}
|
||||
@@ -443,50 +416,29 @@ public class MenuState extends GameState {
|
||||
g2.fillPolygon(p2);
|
||||
|
||||
g2.drawString("Down", 55, 1000);
|
||||
|
||||
|
||||
|
||||
|
||||
g2.dispose();
|
||||
subScreenForeground.createGraphics();
|
||||
}
|
||||
|
||||
public void buttonInAnimation(int button){
|
||||
if(button >= 0 && button < buttons.size() ){
|
||||
if(button >= 0 && button < buttons.size()){
|
||||
buttons.get(button).setX(buttons.get(button).getX()+40);
|
||||
if(buttons.get(button).getX() >= 320){
|
||||
|
||||
if(buttons.get(button).getX() >= 320)
|
||||
animationcounter++;
|
||||
}
|
||||
if(buttons.get(button).getX() >= -200){
|
||||
if(buttons.get(button).getX() >= -200)
|
||||
buttonInAnimation(button+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
public void nextScreen(){
|
||||
if(buttons.get(0).getX() > -700){
|
||||
for(MenuButton b:buttons){
|
||||
b.setX(b.getX()-100);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void previousScreen(){
|
||||
if(buttons.get(0).getX() < 300){
|
||||
for(MenuButton b:buttons){
|
||||
b.setX(b.getX()+100);
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
public Song selectedToSong(int s){
|
||||
s %= songs.size();
|
||||
if(s < 0){
|
||||
if(s < 0)
|
||||
return songs.get(songs.size()+s);
|
||||
}else{
|
||||
else
|
||||
return songs.get(s);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -21,13 +21,15 @@ import data.io.SQLConnector;
|
||||
|
||||
public class TitleState extends GameState {
|
||||
|
||||
BufferedImage pressStart = Images.getImage(ImageType.pressstart);
|
||||
BufferedImage colorStrike = Images.getImage(ImageType.colorstrike);
|
||||
BufferedImage kast = Images.getImage(ImageType.kast);
|
||||
VolatileImage background;
|
||||
Font textFont = new Font("OCR A Extended", Font.BOLD, 15);
|
||||
Font textFont2 = new Font("OCR A Extended", Font.BOLD, 130);
|
||||
GradientPaint gp = new GradientPaint(300, 0, new Color(0, 0, 1, 0.6f), 980, 1024, new Color(0, 0, 1, 0.2f));
|
||||
private BufferedImage pressStart = Images.getImage(ImageType.pressstart),
|
||||
colorStrike = Images.getImage(ImageType.colorstrike),
|
||||
kast = Images.getImage(ImageType.kast);
|
||||
private VolatileImage background;
|
||||
|
||||
private Font textFont = new Font("OCR A Extended", Font.BOLD, 15),
|
||||
textFont2 = new Font("OCR A Extended", Font.BOLD, 130);
|
||||
|
||||
private GradientPaint gp = new GradientPaint(300, 0, new Color(0, 0, 1, 0.6f), 980, 1024, new Color(0, 0, 1, 0.2f));
|
||||
|
||||
|
||||
private int index = 0,
|
||||
@@ -48,7 +50,6 @@ public class TitleState extends GameState {
|
||||
|
||||
@Override
|
||||
public void update(float factor) {
|
||||
|
||||
frame++;
|
||||
indexKast++;
|
||||
}
|
||||
@@ -78,7 +79,6 @@ public class TitleState extends GameState {
|
||||
gsm.setState(State.MENU_STATE);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-4
@@ -12,12 +12,9 @@ import control.GameStateManager;
|
||||
|
||||
public class GameView extends JPanel {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1939480784205689618L;
|
||||
|
||||
GameStateManager gsm;
|
||||
private GameStateManager gsm;
|
||||
|
||||
// Font fpsfont = new Font("OCR A Extended", Font.BOLD, 60);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user