package minizoo; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.Timer; import minizoo.c.*; import minizoo.c.animal.*; import minizoo.c.background.Background; import minizoo.c.animal.sheep.Sheep; import minizoo.c.background.Ground; import minizoo.c.core.Vector2d; import minizoo.c.object.AnimalClear; import minizoo.c.object.MusicPlayer; import minizoo.c.object.ToggleBG; public class App implements ActionListener { public final static String Title = "Our Mini Zoo!"; public final static int ScreenWidth = 1280; public final static int ScreenHeight = 720; public static boolean isDancingTime = false; Background background = null; public void toggleBackground() { background.toggleBG(); } public static App Instance() { if (instance == null) { instance = new App(); } return instance; } private static App instance; public void init() { if (mainFrame != null) { System.err.println("Already Application initialized."); return; } mainFrame = new JFrame(); mainFrame.setTitle(App.Title); mainFrame.setSize(App.ScreenWidth/2, App.ScreenHeight/2); mainFrame.setLayout(new BorderLayout()); mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainCanvas = new Canvas(); mainCanvas.setSize(App.ScreenWidth, App.ScreenHeight); mainFrame.add(mainCanvas, BorderLayout.CENTER); mainLoopTimer = new Timer(0, this); mouse = new Touch(); mainCanvas.addMouseListener(mouse); mainCanvas.addMouseMotionListener(mouse); background = new Background("Background"); Entity.add(background, Integer.MIN_VALUE); Ground ground = new Ground("ground"); Entity.add(ground, Integer.MIN_VALUE+1); Sheep sheep = new Sheep("Sheep Prototype"); sheep.setPosition(new Vector2d(ScreenWidth/2.0, ScreenHeight/2.0)); Entity.add(sheep); MusicPlayer musicPlayer = new MusicPlayer(""); musicPlayer.setPosition(new Vector2d(ScreenWidth-100, 100)); Entity.add(musicPlayer); ToggleBG toggleBG = new ToggleBG(""); toggleBG.setPosition(ScreenWidth-100, 200); Entity.add(toggleBG); AnimalClear animalClear = new AnimalClear(""); animalClear.setPosition(ScreenWidth-100, 300); Entity.add(animalClear); AnimalSpawnButton sheepSpawner = new AnimalSpawnButton(new SheepFactory()); sheepSpawner.setPosition(new Vector2d(100, 100)); Entity.add(sheepSpawner, 0); AnimalSpawnButton penguinSpanwer = new AnimalSpawnButton(new PenguinFactory()); penguinSpanwer.setPosition(new Vector2d(200, 100)); Entity.add(penguinSpanwer, 0); AnimalSpawnButton pandaSpanwer = new AnimalSpawnButton(new PandaFactory()); pandaSpanwer.setPosition(new Vector2d(300, 100)); Entity.add(pandaSpanwer, 0); AnimalSpawnButton bearSpanwer = new AnimalSpawnButton(new BearFactory()); bearSpanwer.setPosition(new Vector2d(400, 100)); Entity.add(bearSpanwer, 0); AnimalSpawnButton duckSpanwer = new AnimalSpawnButton(new DuckFactory()); duckSpanwer.setPosition(new Vector2d(500, 100)); Entity.add(duckSpanwer, 0); AnimalSpawnButton lionSpanwer = new AnimalSpawnButton(new LionFactory()); lionSpanwer.setPosition(new Vector2d(600, 100)); Entity.add(lionSpanwer, 0); //FPSTimer fpsTimer = new FPSTimer(); //Entity.add(fpsTimer, Integer.MAX_VALUE); } public void run() { init(); mainLoopTimer.setRepeats(true); mainLoopTimer.start(); mainFrame.setVisible(true); } @Override public void actionPerformed(ActionEvent arg0) { long currUpdateTime = System.currentTimeMillis(); if ((currUpdateTime-lastUpdateTime) < 1000) { this.MainLoop((currUpdateTime-lastUpdateTime)*0.001f); } lastUpdateTime = currUpdateTime; } void MainLoop(float elapsed) { this.Update(elapsed); mainCanvas.update(elapsed); mainCanvas.repaint(); } void Update(@SuppressWarnings("UnusedParameters") float elapsed) { if (mouse != null) { mouse.Update(); } } public static void main (String []args) { App.Instance().run(); } public Canvas getCanvas() { return mainCanvas; } long lastUpdateTime; JFrame mainFrame; Canvas mainCanvas; Timer mainLoopTimer; Touch mouse; public Touch getTouch() { return mouse; } }