package com.mygame; import java.util.ArrayList; import loon.geom.RectBox; import loon.utils.MathUtils; import loon.utils.RefObject; public class StateMainMenu extends GameState { private int exitTicks; private StateGame gameState; private Sprite mainmenu_background; private Button mainmenu_exit; private Button mainmenu_info; private Sprite mainmenu_logo; private Button mainmenu_play; private Sprite mainmenu_shadow; private Button mainmenu_sounds; private Sprite medalssmall; private Sprite menubg; private ArrayList<RectBox> points = new ArrayList<RectBox>(); private int tileh; private int tilew; private int trainPos; private boolean trial; private Sprite trialGetFull; public StateMainMenu(GameCore parent) { super.initState(parent); this.mainmenu_background = new Sprite("menu", 1, 1, 9, true); this.mainmenu_logo = new Sprite("menu_logo", 1, 1, 9, true); this.mainmenu_shadow = new Sprite("menu_shadow", 1, 1, 9, true); this.mainmenu_play = new Button(EButtonTypes.ENormal, "btnplay", 0x12, 5); this.mainmenu_exit = new Button(EButtonTypes.ENormal, "exit3", 0x12, 5); this.mainmenu_sounds = new Button(EButtonTypes.ESwitch, "mute11", 0x12, 5); this.mainmenu_info = new Button(EButtonTypes.ENormal, "info", 0x12, 5); this.medalssmall = new Sprite("medalssmall", 3, 1, 0x12, true); this.trialGetFull = new Sprite("trial-getfull", 1, 1, 9, true); this.menubg = new Sprite("menubg", 1, 1, 9, true); this.mainmenu_sounds.toggle(super.game.getSettings().m_sounds); this.tilew = 0x4a; this.tileh = 0x3d; int y = this.tileh * 2; this.points.add(new RectBox(0, 0, 4, 3)); this.points.add(new RectBox(0, this.tileh, 2, 2)); this.points.add(new RectBox(0, y, 3, 2)); this.points.add(new RectBox(this.tilew, y, 1, 1)); this.points.add(new RectBox(this.tilew * 2, y, 1, 1)); this.points.add(new RectBox(this.tilew * 3, y, 1, 1)); this.points.add(new RectBox(this.tilew * 4, y, 1, 1)); this.points.add(new RectBox(this.tilew * 5, y, 1, 1)); this.points.add(new RectBox(this.tilew * 6, y, 1, 1)); this.points.add(new RectBox(this.tilew * 7, y, 1, 1)); this.points.add(new RectBox(this.tilew * 8, y, 6, 1)); this.points.add(new RectBox(this.tilew * 8, this.tileh, 2, 0)); this.points.add(new RectBox(this.tilew * 8, 0, 5, 0)); this.points.add(new RectBox(this.tilew * 7, 0, 1, 3)); this.points.add(new RectBox(this.tilew * 6, 0, 1, 3)); this.points.add(new RectBox(this.tilew * 5, 0, 1, 3)); this.points.add(new RectBox(this.tilew * 4, 0, 1, 3)); this.points.add(new RectBox(this.tilew * 3, 0, 1, 3)); this.points.add(new RectBox(this.tilew * 2, 0, 1, 3)); this.points.add(new RectBox(this.tilew, 0, 1, 3)); this.trainPos = 0x125c; } @Override public void activateState() { this.trial = super.game.isTrial(); this.gameState = (StateGame) super.game.getGameState(EStates.EGameStateGame); super.game.startMenuMusic(false); super.game.setMenuMusicQuieter(false); this.exitTicks = -1; } @Override public void backButtonPressed() { super.game.exit(); } private int checkCloser(int pos, int to, int current) { int num = (int) MathUtils.distance((float) pos, (float) to); if (num < current) { return num; } return current; } @Override public void deactivateState() { } @Override public void paint(Painter painter) { int num = super.game.getW(); int num2 = super.game.getH(); for (int i = 0; i < num; i += this.menubg.getWidth()) { this.menubg.Paint(painter, (float) i, 0f, 0, 0f); } int num4 = super.game.getTick(); int y = num2 - ((this.mainmenu_play.getH() * 60) / 100); int num6 = (this.mainmenu_play.getH() * 60) / 100; int x = (this.mainmenu_play.getH() * 60) / 100; this.mainmenu_background.Paint(painter, 30f, 10f, 0, 0f); int num8 = GameUtils.sin(num4 * 7); float num9 = 139f; float num10 = 65f + (((float)(num8 * 5)) / 8192f); int num11 = 0x30; int num12 = 0x20; int trackx = 0x37; int tracky = 0xd0; int num15 = (this.points.size() * 0x3e8) / 3; for (int j = 0; j < 3; j++) { int rpos = this.trainPos + (num15 * j); int num18 = (rpos / 0x3e8) % this.points.size(); int pos = (rpos - 780) % (this.points.size() * 0x3e8); int current = this.checkCloser(pos, 0x3e8, this.points.size() * 0x3e8); current = this.checkCloser(pos, 0xbb8, current); current = this.checkCloser(pos, 0x2af8, current); current = this.checkCloser(pos, 0x32c8, current); current = this.checkCloser(pos, 0x5208, current); int num21 = 0; if (current < 0x5dc) { num21 = (450 * (0x5dc - current)) / 0x5dc; } int num22 = num21 / 8; int num23 = num21; int num24 = rpos % 0x3e8; if (((num18 >= 0) && ((num18 < 4) || ((num18 == 4) && (num24 < 400)))) || (num18 > 13)) { this.paintMenuTrain(painter, ((rpos - 780) - 800) - num23, ETrainTypes.ETrainCarriage, j, trackx, tracky); this.paintMenuTrain(painter, (rpos - 780) - num22, ETrainTypes.ETrainCoal, j, trackx, tracky - 6); this.paintMenuTrain(painter, rpos, ETrainTypes.ETrainEngine, j, trackx, tracky); } else { this.paintMenuTrain(painter, rpos, ETrainTypes.ETrainEngine, j, trackx, tracky); this.paintMenuTrain(painter, (rpos - 780) - num22, ETrainTypes.ETrainCoal, j, trackx, tracky - 6); this.paintMenuTrain(painter, ((rpos - 780) - 800) - num23, ETrainTypes.ETrainCarriage, j, trackx, tracky); } } this.mainmenu_shadow.Paint(painter, (float) num11, (float) num12, 0); this.mainmenu_logo.Paint(painter, num9, num10, 0); if (super.game.getSettings().m_levels.get(14) > 0) { this.medalssmall.Paint(painter, 622f, 302f, 0); } if (super.game.getSettings().m_levels.get(0x1d) > 0) { this.medalssmall.Paint(painter, 678f, 288f, 1); } if (super.game.getSettings().m_levels.get(0x2c) > 0) { this.medalssmall.Paint(painter, 733f, 276f, 2); } if (this.mainmenu_sounds.paint(painter, super.game, num - x, y) && (this.exitTicks == -1)) { boolean flag = this.mainmenu_sounds.isToggled(); super.game.getSettings().m_sounds = flag; if (flag) { super.game.startMenuMusic(false); super.game.doButtonPressSound(); } else { super.game.stopMenuMusic(false); } super.game.getSettings().Save(); } if (this.mainmenu_play.paint(painter, super.game, num / 2, y) && (this.exitTicks == -1)) { super.game.clearMouseStatus(); super.game.changeState(EStates.EGameStateMainLevelSelect); super.game.doButtonPressSound(); } if (this.mainmenu_exit.paint(painter, super.game, x, y) && (this.exitTicks == -1)) { super.game.clearMouseStatus(); this.exitTicks = 0; super.game.exit(); super.game.doButtonPressSound(); } if (this.mainmenu_info.paint(painter, super.game, num - x, num6) && (this.exitTicks == -1)) { super.game.changeState(EStates.EGameStateGameEnd); super.game.doButtonPressSound(); } if (this.trial) { int num25 = 0x10; int num26 = super.game.getMouseX(); int num27 = super.game.getMouseY(); boolean flag2 = (num26 < ((this.trialGetFull.getWidth() + num25) + num25)) && (num27 < ((this.trialGetFull.getHeight() + num25) + num25)); int num28 = num25; if (flag2 && super.game.isMouseDown()) { num28 += 4; } this.trialGetFull.Paint(painter, (float) num28, (float) num28, 0); if (super.game.isMouseUp() && flag2) { super.game.clearMouseStatus(); super.game.setValue(EValues.EValueTrialClickedFrom, 100); super.game.changeState(EStates.EGameStateTrial); } } } private void paintMenuTrain(Painter painter, int rpos, ETrainTypes type, int color, int trackx, int tracky) { int num = (rpos / 0x3e8) % this.points.size(); int drawpos = rpos % 0x3e8; int x = (int) this.points.get(num).x; int y = (int) this.points.get(num).y; int width = this.points.get(num).width; int height = this.points.get(num).height; int angle = 0; int num8 = 0; int num9 = 0; int tilelength = 0x3e8; RefObject<Integer> tempRef_num8 = new RefObject<Integer>(num8); RefObject<Integer> tempRef_num9 = new RefObject<Integer>(num9); RefObject<Integer> tempRef_angle = new RefObject<Integer>(angle); Train.getPos(tempRef_num8, tempRef_num9, tempRef_angle, x * 10, y * 10, ETileTypes.forValue(width), drawpos, this.tilew * 10, this.tileh * 10, tilelength, EDirections.forValue(height)); num8 = tempRef_num8.argvalue; num9 = tempRef_num9.argvalue; angle = tempRef_angle.argvalue; int num11 = ((GameUtils.cos(-16) * num8) - (GameUtils.sin(-16) * num9)) >> 13; int num12 = ((GameUtils.sin(-16) * num8) + (GameUtils.cos(-16) * num9)) >> 13; num11 += trackx * 10; num12 += tracky * 10; if (type == ETrainTypes.ETrainCoal) { this.gameState.paintTrain(painter, num11, num12, angle + 20, type.getValue(), color, false, 1f, -5, true); } else { this.gameState.paintTrain(painter, num11, num12, angle + 20, type.getValue(), color, false, 1f, 0, true); } } @Override public void tick() { this.trainPos += 40; } }