99import com .bytehamster .flowitgame .R ;
1010import com .bytehamster .flowitgame .animation .Animation ;
1111import com .bytehamster .flowitgame .animation .AnimationFactory ;
12- import com .bytehamster .flowitgame .animation .AnimationRepeated ;
1312import com .bytehamster .flowitgame .animation .ScaleAnimation ;
1413import com .bytehamster .flowitgame .animation .TranslateAnimation ;
1514import com .bytehamster .flowitgame .filler .Filler ;
@@ -41,6 +40,7 @@ public class GameState extends State {
4140 private Plane headerBackground ;
4241 private Number stepsUsed ;
4342 private Number stepsBest ;
43+ private Number stepsOptimal ;
4444 private boolean isFilling = false ;
4545 private boolean won = false ;
4646 private float topBarHeight ;
@@ -49,6 +49,7 @@ public class GameState extends State {
4949 private float topBarPadding ;
5050 private float stepsUsedCurrentYDelta ;
5151 private float stepsUsedBestYDelta ;
52+ private float stepsOptimalYDelta ;
5253 private LastLevelState lastLevelState = LastLevelState .NO_LEVEL ;
5354 private Filler filler ;
5455
@@ -75,6 +76,7 @@ protected void initialize(GLRenderer glRenderer) {
7576 topButtonY = glRenderer .getHeight () - topButtonSize - topBarPadding ;
7677 stepsUsedCurrentYDelta = topButtonSize * 0.6f ;
7778 stepsUsedBestYDelta = topButtonSize * 0.1f ;
79+ stepsOptimalYDelta = topButtonSize * -0.4f ;
7880
7981 TextureCoordinates coordinatesHeader = TextureCoordinates .getFromBlocks (14 , 12 , 15 , 13 );
8082 headerBackground = new Plane (0 , glRenderer .getHeight (), glRenderer .getWidth (), topBarHeight , coordinatesHeader );
@@ -109,19 +111,25 @@ protected void initialize(GLRenderer glRenderer) {
109111 stepsUsed = new Number ();
110112 stepsUsed .setFontSize (topButtonSize * 0.35f );
111113 stepsUsed .setX (5 * topButtonSize + 3 * topBarPadding );
112- stepsUsed .setY (glRenderer .getHeight () + topBarPadding + stepsUsedCurrentYDelta );
114+ stepsUsed .setY (glRenderer .getHeight () + topBarPadding + stepsUsedCurrentYDelta + 0.25f * topButtonSize );
113115 glRenderer .addDrawable (stepsUsed );
114116
115117 stepsBest = new Number ();
116118 stepsBest .setFontSize (topButtonSize * 0.35f );
117119 stepsBest .setX (5 * topButtonSize + 3 * topBarPadding );
118- stepsBest .setY (glRenderer .getHeight () + topBarPadding + stepsUsedBestYDelta );
120+ stepsBest .setY (glRenderer .getHeight () + topBarPadding + stepsUsedBestYDelta + 0.25f * topButtonSize );
119121 glRenderer .addDrawable (stepsBest );
120122
121- TextureCoordinates coordinateSteps = TextureCoordinates .getFromBlocks (12 , 10 , 15 , 11 );
122- stepsLabel = new Plane (0 , 0 , 3 * topButtonSize , topButtonSize , coordinateSteps );
123+ stepsOptimal = new Number ();
124+ stepsOptimal .setFontSize (topButtonSize * 0.35f );
125+ stepsOptimal .setX (5 * topButtonSize + 3 * topBarPadding );
126+ stepsOptimal .setY (glRenderer .getHeight () + topBarPadding + stepsOptimalYDelta + 0.25f * topButtonSize );
127+ glRenderer .addDrawable (stepsOptimal );
128+
129+ TextureCoordinates coordinateSteps = TextureCoordinates .getFromBlocks (12 , 10 , 15 , 12 );
130+ stepsLabel = new Plane (0 , 0 , 3 * topButtonSize , 2 * topButtonSize , coordinateSteps );
123131 stepsLabel .setX (2 * topButtonSize + 3 * topBarPadding );
124- stepsLabel .setY (glRenderer .getHeight () + topBarPadding );
132+ stepsLabel .setY (glRenderer .getHeight () + topBarPadding - 0.75f * topButtonSize );
125133 stepsLabel .setVisible (false );
126134 glRenderer .addDrawable (stepsLabel );
127135
@@ -160,9 +168,10 @@ public void entry() {
160168 AnimationFactory .startMoveYTo (left , topButtonY );
161169 AnimationFactory .startMoveYTo (right , topButtonY );
162170 AnimationFactory .startMoveYTo (restart , topButtonY );
163- AnimationFactory .startMoveYTo (stepsLabel , topButtonY );
164- AnimationFactory .startMoveYTo (stepsBest , topButtonY + stepsUsedBestYDelta );
165- AnimationFactory .startMoveYTo (stepsUsed , topButtonY + stepsUsedCurrentYDelta );
171+ AnimationFactory .startMoveYTo (stepsLabel , topButtonY - 0.75f * topButtonSize );
172+ AnimationFactory .startMoveYTo (stepsBest , topButtonY + stepsUsedBestYDelta + 0.25f * topButtonSize );
173+ AnimationFactory .startMoveYTo (stepsUsed , topButtonY + stepsUsedCurrentYDelta + 0.25f * topButtonSize );
174+ AnimationFactory .startMoveYTo (stepsOptimal , topButtonY + stepsOptimalYDelta + 0.25f * topButtonSize );
166175 AnimationFactory .startMoveYTo (headerBackground , getScreenHeight () - topBarHeight );
167176 }
168177
@@ -174,6 +183,11 @@ private void reloadLevel() {
174183 } else {
175184 stepsBest .setValue (loadSteps (level .getNumber ()));
176185 }
186+ if (level .getOptimalSteps () <= 0 ) {
187+ stepsOptimal .setValue (Number .VALUE_NAN );
188+ } else {
189+ stepsOptimal .setValue (level .getOptimalSteps ());
190+ }
177191 AnimationFactory .startScaleHide (stepsImproved , 0 );
178192 isFilling = false ;
179193 level .reset ();
@@ -261,9 +275,13 @@ public void exit() {
261275 AnimationFactory .startMoveYTo (right , getScreenHeight () + topBarPadding );
262276 AnimationFactory .startMoveYTo (restart , getScreenHeight () + topBarPadding );
263277 AnimationFactory .startMoveYTo (solved , getScreenHeight () + topBarPadding );
264- AnimationFactory .startMoveYTo (stepsLabel , getScreenHeight () + topBarPadding );
265- AnimationFactory .startMoveYTo (stepsBest , getScreenHeight () + topBarPadding + stepsUsedBestYDelta );
266- AnimationFactory .startMoveYTo (stepsUsed , getScreenHeight () + topBarPadding + stepsUsedCurrentYDelta );
278+ AnimationFactory .startMoveYTo (stepsLabel , getScreenHeight () + topBarPadding - 0.75f * topButtonSize );
279+ AnimationFactory .startMoveYTo (stepsBest , getScreenHeight () + topBarPadding
280+ + stepsUsedBestYDelta + 0.25f * topButtonSize );
281+ AnimationFactory .startMoveYTo (stepsUsed , getScreenHeight () + topBarPadding
282+ + stepsUsedCurrentYDelta + 0.25f * topButtonSize );
283+ AnimationFactory .startMoveYTo (stepsOptimal , getScreenHeight () + topBarPadding
284+ + stepsOptimalYDelta + 0.25f * topButtonSize );
267285 AnimationFactory .startMoveYTo (headerBackground , getScreenHeight ());
268286 AnimationFactory .startMoveYTo (winMessage , -getScreenWidth () * 0.5f );
269287 AnimationFactory .startScaleHide (stepsImproved , 0 );
0 commit comments