1 package de.jos.game.actions;
2
3 import java.awt.AlphaComposite;
4 import java.awt.Composite;
5 import java.awt.Graphics2D;
6
7 import org.apache.commons.lang.StringUtils;
8
9 import com.golden.gamedev.GameObject;
10 import com.golden.gamedev.object.Sprite;
11 import com.golden.gamedev.object.Timer;
12 import com.golden.gamedev.object.sprite.AdvanceSprite;
13
14 import de.jos.game.Constants;
15
16 public class ActionScrollInOut extends AbstractAction implements SpecialActionEvent, Constants {
17
18 private static final double TIMER_INCREMENT = 8.0d;
19
20
21 private Timer timer = null;
22 private Timer waitTimer = null;
23
24 private String text1 = null;
25 private String text2 = null;
26
27 private Sprite top = null;
28 private Sprite bottom = null;
29
30 private enum State {
31 NONE, MOVE_IN, MOVE_OUT, WAITING, FINISHED
32 };
33
34 private State state = State.NONE;
35
36 private int waitCounter = 0;
37
38 private AdvanceSprite bullet = null;
39
40 private Integer nextLevelNewColor = null;
41
42 public ActionScrollInOut() {}
43
44 public void init() {
45 super.init();
46 timer = new Timer(10);
47
48 top = getResourceContainer().getLevelAdvanceTop();
49 top.setBackground(getResourceContainer().getGameBackgroundImage());
50 bottom = getResourceContainer().getLevelAdvanceBottom();
51 bottom.setBackground(getResourceContainer().getGameBackgroundImage());
52
53 top.setX(LEVEL_ADVANCEMENT_X_OFFSET);
54 top.setY(LEVEL_ADVANCEMENT_Y_TARGET - ((9 * SPRITE_HEIGHT) / 2) - 250);
55
56 bottom.setX(LEVEL_ADVANCEMENT_X_OFFSET);
57 bottom.setY(LEVEL_ADVANCEMENT_Y_TARGET + 250);
58
59 if (getNextLevelNewColor() != null && getNextLevelNewColor().intValue() >= 0) {
60 bullet = new AdvanceSprite(getResourceContainer().getBulletSpriteRotate(getNextLevelNewColor()));
61 bullet.setX(220);
62 bullet.setY(300);
63 bullet.setAnimate(true);
64 bullet.setLoopAnim(true);
65 bullet.setAnimationTimer(new Timer(50));
66 }
67
68 waitCounter = 0;
69 setState(State.MOVE_IN);
70 }
71
72 public void update(long elapsedTime, GameObject gameObject) {
73
74 if (getState() == State.MOVE_IN) {
75 if (timer.action(elapsedTime)) {
76 if (bottom.getY() > LEVEL_ADVANCEMENT_Y_TARGET) {
77 top.moveY(TIMER_INCREMENT);
78 bottom.moveY(-TIMER_INCREMENT);
79
80 if (bottom.getY() < LEVEL_ADVANCEMENT_Y_TARGET) {
81 bottom.setY(LEVEL_ADVANCEMENT_Y_TARGET);
82 top.setY(LEVEL_ADVANCEMENT_Y_TARGET - ((9 * SPRITE_HEIGHT) / 2));
83 }
84 } else {
85 setState(State.WAITING);
86 waitTimer = new Timer(3000);
87 }
88 }
89 } else if (getState() == State.MOVE_OUT) {
90 if (timer.action(elapsedTime)) {
91 top.moveY(-TIMER_INCREMENT);
92 bottom.moveY(TIMER_INCREMENT);
93
94 if (bottom.getY() > (LEVEL_ADVANCEMENT_Y_TARGET + 250)) {
95 setState(State.FINISHED);
96 }
97 }
98 } else if (getState() == State.WAITING) {
99 if (waitTimer.action(elapsedTime) == true) {
100 waitTimer.setActive(false);
101 waitCounter++;
102 } else if (waitCounter >= 1) {
103 setState(State.MOVE_OUT);
104 }
105 }
106
107 if (bullet != null) {
108 bullet.update(elapsedTime);
109 }
110 }
111
112 public void render(Graphics2D graphics, GameObject gameObject) {
113 Composite old = graphics.getComposite();
114 Composite scoreComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f);
115 graphics.setComposite(scoreComposite);
116
117
118 graphics.setClip(73, 74, 397 - 73, 397 - 74);
119
120 top.render(graphics);
121 bottom.render(graphics);
122
123
124 graphics.setClip(0, 0, Constants.WINDOW_WIDTH, Constants.WINDOW_HEIGHT);
125
126 if (getState() == State.WAITING) {
127 getGameFont().drawString(graphics, getText1(), 140, 210);
128 getGameFont().drawString(graphics, getText2(), 140, 250);
129
130 if (bullet != null) {
131 bullet.render(graphics);
132 }
133 }
134
135 graphics.setComposite(old);
136 }
137
138 public Integer getLayer() {
139 return LayerConstants.LAYER_3;
140 }
141
142 public boolean isFinished() {
143 return (state == State.FINISHED);
144 }
145
146 public State getState() {
147 return state;
148 }
149
150 public void setState(State state) {
151 this.state = state;
152 }
153
154 public String getText1() {
155 return text1;
156 }
157
158 public void setText1(String text1) {
159 this.text1 = StringUtils.upperCase(text1);
160 }
161
162 public String getText2() {
163 return text2;
164 }
165
166 public void setText2(String text2) {
167 this.text2 = StringUtils.upperCase(text2);
168 }
169
170 public Integer getNextLevelNewColor() {
171 return nextLevelNewColor;
172 }
173
174 public void setNextLevelNewColor(Integer nextLevelNewColor) {
175 this.nextLevelNewColor = nextLevelNewColor;
176 }
177
178 public String getName() {
179 return this.getClass().getName();
180 }
181 }