1cfd74d65d832137e20e193c960802afba73b5d38sm/*
23c1e67e433728684b5f228c5d4f3e5b1457bb271sm * Copyright (C) 2010 The Android Open Source Project
3cfd74d65d832137e20e193c960802afba73b5d38sm *
4cfd74d65d832137e20e193c960802afba73b5d38sm * Licensed under the Apache License, Version 2.0 (the "License");
5cfd74d65d832137e20e193c960802afba73b5d38sm * you may not use this file except in compliance with the License.
6cfd74d65d832137e20e193c960802afba73b5d38sm * You may obtain a copy of the License at
7cfd74d65d832137e20e193c960802afba73b5d38sm *
8cfd74d65d832137e20e193c960802afba73b5d38sm *      http://www.apache.org/licenses/LICENSE-2.0
9cfd74d65d832137e20e193c960802afba73b5d38sm *
10cfd74d65d832137e20e193c960802afba73b5d38sm * Unless required by applicable law or agreed to in writing, software
11cfd74d65d832137e20e193c960802afba73b5d38sm * distributed under the License is distributed on an "AS IS" BASIS,
12cfd74d65d832137e20e193c960802afba73b5d38sm * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cfd74d65d832137e20e193c960802afba73b5d38sm * See the License for the specific language governing permissions and
14cfd74d65d832137e20e193c960802afba73b5d38sm * limitations under the License.
15cfd74d65d832137e20e193c960802afba73b5d38sm */
16cfd74d65d832137e20e193c960802afba73b5d38sm
17cfd74d65d832137e20e193c960802afba73b5d38smpackage com.replica.replicaisland;
18cfd74d65d832137e20e193c960802afba73b5d38sm
19cfd74d65d832137e20e193c960802afba73b5d38sm/**
20cfd74d65d832137e20e193c960802afba73b5d38sm * A very simple manager for orthographic in-game UI elements.
21cfd74d65d832137e20e193c960802afba73b5d38sm * TODO: This should probably manage a number of hud objects in keeping with the component-centric
22cfd74d65d832137e20e193c960802afba73b5d38sm * architecture of this engine.  The current code is monolithic and should be refactored.
23cfd74d65d832137e20e193c960802afba73b5d38sm */
24cfd74d65d832137e20e193c960802afba73b5d38smpublic class HudSystem extends BaseObject {
25cfd74d65d832137e20e193c960802afba73b5d38sm    private static final int FUEL_BAR_EDGE_PADDING = 15;
26cfd74d65d832137e20e193c960802afba73b5d38sm    private static final float FUEL_DECREASE_BAR_SPEED = 0.75f;
27cfd74d65d832137e20e193c960802afba73b5d38sm    private static final float FUEL_INCREASE_BAR_SPEED = 2.0f;
28cfd74d65d832137e20e193c960802afba73b5d38sm    private static final float FLY_BUTTON_X = -12.0f;
29cfd74d65d832137e20e193c960802afba73b5d38sm    private static final float FLY_BUTTON_Y = -5.0f;
30cfd74d65d832137e20e193c960802afba73b5d38sm    private static final float STOMP_BUTTON_X = 85.0f;
31cfd74d65d832137e20e193c960802afba73b5d38sm    private static final float STOMP_BUTTON_Y = -10.0f;
32cfd74d65d832137e20e193c960802afba73b5d38sm    private static final float STOMP_BUTTON_SCALE = 0.65f;
33cfd74d65d832137e20e193c960802afba73b5d38sm    private static final int COLLECTABLE_EDGE_PADDING = 8;
34cfd74d65d832137e20e193c960802afba73b5d38sm    private static final int MAX_DIGITS = 4;
352b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    private static final float MOVEMENT_SLIDER_BASE_X = 20.0f;
362b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    private static final float MOVEMENT_SLIDER_BASE_Y = 32.0f;
372b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    private static final float MOVEMENT_SLIDER_BUTTON_X = MOVEMENT_SLIDER_BASE_X + 32.0f;
382b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    private static final float MOVEMENT_SLIDER_BUTTON_Y =  MOVEMENT_SLIDER_BASE_Y - 16.0f;
392b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    private static final float FLY_BUTTON_WIDTH = 128;
402b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    private static final float STOMP_BUTTON_WIDTH = FLY_BUTTON_WIDTH * STOMP_BUTTON_SCALE;
412b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    private static final float MOVEMENT_SLIDER_WIDTH = 128;
42cfd74d65d832137e20e193c960802afba73b5d38sm
43cfd74d65d832137e20e193c960802afba73b5d38sm    private DrawableBitmap mFuelDrawable;
44cfd74d65d832137e20e193c960802afba73b5d38sm    private DrawableBitmap mFuelBackgroundDrawable;
45cfd74d65d832137e20e193c960802afba73b5d38sm    private float mFuelPercent;
46cfd74d65d832137e20e193c960802afba73b5d38sm    private float mFuelTargetPercent;
47cfd74d65d832137e20e193c960802afba73b5d38sm
48cfd74d65d832137e20e193c960802afba73b5d38sm    private Texture mFadeTexture;
49cfd74d65d832137e20e193c960802afba73b5d38sm    private float mFadeStartTime;
50cfd74d65d832137e20e193c960802afba73b5d38sm    private float mFadeDuration;
51cfd74d65d832137e20e193c960802afba73b5d38sm    private boolean mFadeIn;
52cfd74d65d832137e20e193c960802afba73b5d38sm    private boolean mFading;
53cfd74d65d832137e20e193c960802afba73b5d38sm    private int mFadePendingEventType;
54cfd74d65d832137e20e193c960802afba73b5d38sm	private int mFadePendingEventIndex;
55cfd74d65d832137e20e193c960802afba73b5d38sm
56cfd74d65d832137e20e193c960802afba73b5d38sm    private DrawableBitmap mFlyButtonEnabledDrawable;
57cfd74d65d832137e20e193c960802afba73b5d38sm    private DrawableBitmap mFlyButtonDisabledDrawable;
58cfd74d65d832137e20e193c960802afba73b5d38sm    private DrawableBitmap mFlyButtonDepressedDrawable;
59cfd74d65d832137e20e193c960802afba73b5d38sm
60cfd74d65d832137e20e193c960802afba73b5d38sm    private DrawableBitmap mStompButtonEnabledDrawable;
61cfd74d65d832137e20e193c960802afba73b5d38sm    private DrawableBitmap mStompButtonDepressedDrawable;
62cfd74d65d832137e20e193c960802afba73b5d38sm
632b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    private DrawableBitmap mMovementSliderBaseDrawable;
642b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    private DrawableBitmap mMovementSliderButtonDrawable;
652b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    private DrawableBitmap mMovementSliderButtonDepressedDrawable;
662b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
672b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
68cfd74d65d832137e20e193c960802afba73b5d38sm    private Vector2 mFlyButtonLocation;
69cfd74d65d832137e20e193c960802afba73b5d38sm    private boolean mFlyButtonActive;
70cfd74d65d832137e20e193c960802afba73b5d38sm    private boolean mFlyButtonPressed;
71cfd74d65d832137e20e193c960802afba73b5d38sm
72cfd74d65d832137e20e193c960802afba73b5d38sm    private Vector2 mStompButtonLocation;
73cfd74d65d832137e20e193c960802afba73b5d38sm    private boolean mStompButtonPressed;
74cfd74d65d832137e20e193c960802afba73b5d38sm
752b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    private Vector2 mMovementSliderBaseLocation;
762b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    private Vector2 mMovementSliderButtonLocation;
772b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    private boolean mMovementSliderMode;
782b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    private boolean mMovementSliderButtonPressed;
792b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
80cfd74d65d832137e20e193c960802afba73b5d38sm    private DrawableBitmap mRubyDrawable;
81cfd74d65d832137e20e193c960802afba73b5d38sm    private DrawableBitmap mCoinDrawable;
82cfd74d65d832137e20e193c960802afba73b5d38sm
83cfd74d65d832137e20e193c960802afba73b5d38sm    private int mCoinCount;
84cfd74d65d832137e20e193c960802afba73b5d38sm    private int mRubyCount;
85cfd74d65d832137e20e193c960802afba73b5d38sm    private Vector2 mCoinLocation;
86cfd74d65d832137e20e193c960802afba73b5d38sm    private Vector2 mRubyLocation;
87cfd74d65d832137e20e193c960802afba73b5d38sm    private int[] mCoinDigits;
88cfd74d65d832137e20e193c960802afba73b5d38sm    private int[] mRubyDigits;
89cfd74d65d832137e20e193c960802afba73b5d38sm    private boolean mCoinDigitsChanged;
90cfd74d65d832137e20e193c960802afba73b5d38sm    private boolean mRubyDigitsChanged;
91cfd74d65d832137e20e193c960802afba73b5d38sm
929d4cc2572d37983607df38b0f4216ed76ac51814sm    private int mFPS;
939d4cc2572d37983607df38b0f4216ed76ac51814sm    private Vector2 mFPSLocation;
949d4cc2572d37983607df38b0f4216ed76ac51814sm    private int[] mFPSDigits;
959d4cc2572d37983607df38b0f4216ed76ac51814sm    private boolean mFPSDigitsChanged;
969d4cc2572d37983607df38b0f4216ed76ac51814sm    private boolean mShowFPS;
979d4cc2572d37983607df38b0f4216ed76ac51814sm
98cfd74d65d832137e20e193c960802afba73b5d38sm    private DrawableBitmap[] mDigitDrawables;
99cfd74d65d832137e20e193c960802afba73b5d38sm    private DrawableBitmap mXDrawable;
100cfd74d65d832137e20e193c960802afba73b5d38sm
101cfd74d65d832137e20e193c960802afba73b5d38sm
102cfd74d65d832137e20e193c960802afba73b5d38sm    public HudSystem() {
103cfd74d65d832137e20e193c960802afba73b5d38sm        super();
104cfd74d65d832137e20e193c960802afba73b5d38sm        mFlyButtonLocation = new Vector2();
105cfd74d65d832137e20e193c960802afba73b5d38sm        mStompButtonLocation = new Vector2();
106cfd74d65d832137e20e193c960802afba73b5d38sm        mCoinLocation = new Vector2();
107cfd74d65d832137e20e193c960802afba73b5d38sm        mRubyLocation = new Vector2();
1089d4cc2572d37983607df38b0f4216ed76ac51814sm        mFPSLocation = new Vector2();
109cfd74d65d832137e20e193c960802afba73b5d38sm        mDigitDrawables = new DrawableBitmap[10];
110cfd74d65d832137e20e193c960802afba73b5d38sm        mCoinDigits = new int[MAX_DIGITS];
111cfd74d65d832137e20e193c960802afba73b5d38sm        mRubyDigits = new int[MAX_DIGITS];
1129d4cc2572d37983607df38b0f4216ed76ac51814sm        mFPSDigits = new int[MAX_DIGITS];
1132b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mMovementSliderBaseLocation = new Vector2();
1142b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mMovementSliderButtonLocation = new Vector2();
115cfd74d65d832137e20e193c960802afba73b5d38sm
116cfd74d65d832137e20e193c960802afba73b5d38sm        reset();
117cfd74d65d832137e20e193c960802afba73b5d38sm    }
118cfd74d65d832137e20e193c960802afba73b5d38sm
119cfd74d65d832137e20e193c960802afba73b5d38sm    @Override
120cfd74d65d832137e20e193c960802afba73b5d38sm    public void reset() {
121cfd74d65d832137e20e193c960802afba73b5d38sm        mFuelDrawable = null;
122cfd74d65d832137e20e193c960802afba73b5d38sm        mFadeTexture = null;
123cfd74d65d832137e20e193c960802afba73b5d38sm        mFuelPercent = 1.0f;
124cfd74d65d832137e20e193c960802afba73b5d38sm        mFuelTargetPercent = 1.0f;
125cfd74d65d832137e20e193c960802afba73b5d38sm        mFading = false;
126cfd74d65d832137e20e193c960802afba73b5d38sm        mFlyButtonDisabledDrawable = null;
127cfd74d65d832137e20e193c960802afba73b5d38sm        mFlyButtonEnabledDrawable = null;
128cfd74d65d832137e20e193c960802afba73b5d38sm        mFlyButtonDepressedDrawable = null;
129cfd74d65d832137e20e193c960802afba73b5d38sm        mFlyButtonLocation.set(FLY_BUTTON_X, FLY_BUTTON_Y);
130cfd74d65d832137e20e193c960802afba73b5d38sm        mFlyButtonActive = true;
131cfd74d65d832137e20e193c960802afba73b5d38sm        mFlyButtonPressed = false;
132cfd74d65d832137e20e193c960802afba73b5d38sm        mStompButtonEnabledDrawable = null;
133cfd74d65d832137e20e193c960802afba73b5d38sm        mStompButtonDepressedDrawable = null;
134cfd74d65d832137e20e193c960802afba73b5d38sm        mStompButtonLocation.set(STOMP_BUTTON_X, STOMP_BUTTON_Y);
135cfd74d65d832137e20e193c960802afba73b5d38sm        mStompButtonPressed = false;
136cfd74d65d832137e20e193c960802afba73b5d38sm        mCoinCount = 0;
137cfd74d65d832137e20e193c960802afba73b5d38sm        mRubyCount = 0;
138cfd74d65d832137e20e193c960802afba73b5d38sm        mCoinDigits[0] = 0;
139cfd74d65d832137e20e193c960802afba73b5d38sm        mCoinDigits[1] = -1;
140cfd74d65d832137e20e193c960802afba73b5d38sm        mRubyDigits[0] = 0;
141cfd74d65d832137e20e193c960802afba73b5d38sm        mRubyDigits[1] = -1;
142cfd74d65d832137e20e193c960802afba73b5d38sm        mCoinDigitsChanged = true;
143cfd74d65d832137e20e193c960802afba73b5d38sm        mRubyDigitsChanged = true;
1449d4cc2572d37983607df38b0f4216ed76ac51814sm        mFPS = 0;
1459d4cc2572d37983607df38b0f4216ed76ac51814sm        mFPSDigits[0] = 0;
1469d4cc2572d37983607df38b0f4216ed76ac51814sm        mFPSDigits[1] = -1;
1479d4cc2572d37983607df38b0f4216ed76ac51814sm        mFPSDigitsChanged = true;
1489d4cc2572d37983607df38b0f4216ed76ac51814sm        mShowFPS = false;
149cfd74d65d832137e20e193c960802afba73b5d38sm        for (int x = 0; x < mDigitDrawables.length; x++) {
150cfd74d65d832137e20e193c960802afba73b5d38sm            mDigitDrawables[x] = null;
151cfd74d65d832137e20e193c960802afba73b5d38sm        }
152cfd74d65d832137e20e193c960802afba73b5d38sm        mXDrawable = null;
153cfd74d65d832137e20e193c960802afba73b5d38sm        mFadePendingEventType = GameFlowEvent.EVENT_INVALID;
154cfd74d65d832137e20e193c960802afba73b5d38sm        mFadePendingEventIndex = 0;
1552b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
1562b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mMovementSliderBaseDrawable = null;
1572b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mMovementSliderButtonDrawable = null;
1582b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mMovementSliderButtonDepressedDrawable = null;
1592b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mMovementSliderBaseLocation.set(MOVEMENT_SLIDER_BASE_X, MOVEMENT_SLIDER_BASE_Y);
1602b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mMovementSliderButtonLocation.set(MOVEMENT_SLIDER_BUTTON_X, MOVEMENT_SLIDER_BUTTON_Y);
1612b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mMovementSliderMode = false;
1622b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mMovementSliderButtonPressed = false;
163cfd74d65d832137e20e193c960802afba73b5d38sm    }
164cfd74d65d832137e20e193c960802afba73b5d38sm
165cfd74d65d832137e20e193c960802afba73b5d38sm    public void setFuelPercent(float percent) {
166cfd74d65d832137e20e193c960802afba73b5d38sm        mFuelTargetPercent = percent;
167cfd74d65d832137e20e193c960802afba73b5d38sm    }
168cfd74d65d832137e20e193c960802afba73b5d38sm
169cfd74d65d832137e20e193c960802afba73b5d38sm    public void setFuelDrawable(DrawableBitmap fuel, DrawableBitmap background) {
170cfd74d65d832137e20e193c960802afba73b5d38sm        mFuelDrawable = fuel;
171cfd74d65d832137e20e193c960802afba73b5d38sm        mFuelBackgroundDrawable = background;
172cfd74d65d832137e20e193c960802afba73b5d38sm    }
173cfd74d65d832137e20e193c960802afba73b5d38sm
174cfd74d65d832137e20e193c960802afba73b5d38sm    public void setFadeTexture(Texture texture) {
175cfd74d65d832137e20e193c960802afba73b5d38sm        mFadeTexture = texture;
176cfd74d65d832137e20e193c960802afba73b5d38sm    }
177cfd74d65d832137e20e193c960802afba73b5d38sm
1782b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    public void setButtonDrawables(DrawableBitmap disabled, DrawableBitmap enabled, DrawableBitmap depressed,
1792b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    		DrawableBitmap stompEnabled, DrawableBitmap stompDepressed,
1802b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    		DrawableBitmap sliderBase, DrawableBitmap sliderButton, DrawableBitmap sliderDepressed) {
181cfd74d65d832137e20e193c960802afba73b5d38sm        mFlyButtonDisabledDrawable = disabled;
182cfd74d65d832137e20e193c960802afba73b5d38sm        mFlyButtonEnabledDrawable = enabled;
183cfd74d65d832137e20e193c960802afba73b5d38sm        mFlyButtonDepressedDrawable = depressed;
184cfd74d65d832137e20e193c960802afba73b5d38sm        mStompButtonEnabledDrawable = stompEnabled;
185cfd74d65d832137e20e193c960802afba73b5d38sm        mStompButtonDepressedDrawable = stompDepressed;
1862b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mMovementSliderBaseDrawable = sliderBase;
1872b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mMovementSliderButtonDrawable = sliderButton;
1882b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mMovementSliderButtonDepressedDrawable = sliderDepressed;
189cfd74d65d832137e20e193c960802afba73b5d38sm    }
190cfd74d65d832137e20e193c960802afba73b5d38sm
191cfd74d65d832137e20e193c960802afba73b5d38sm    public void setDigitDrawables(DrawableBitmap[] digits, DrawableBitmap xMark) {
192cfd74d65d832137e20e193c960802afba73b5d38sm        mXDrawable = xMark;
193cfd74d65d832137e20e193c960802afba73b5d38sm        for (int x = 0; x < mDigitDrawables.length && x < digits.length; x++) {
194cfd74d65d832137e20e193c960802afba73b5d38sm            mDigitDrawables[x] = digits[x];
195cfd74d65d832137e20e193c960802afba73b5d38sm        }
196cfd74d65d832137e20e193c960802afba73b5d38sm    }
197cfd74d65d832137e20e193c960802afba73b5d38sm
198cfd74d65d832137e20e193c960802afba73b5d38sm    public void setCollectableDrawables(DrawableBitmap coin, DrawableBitmap ruby) {
199cfd74d65d832137e20e193c960802afba73b5d38sm        mCoinDrawable = coin;
200cfd74d65d832137e20e193c960802afba73b5d38sm        mRubyDrawable = ruby;
201cfd74d65d832137e20e193c960802afba73b5d38sm    }
202cfd74d65d832137e20e193c960802afba73b5d38sm
2032b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    public void setButtonState(boolean pressed, boolean attackPressed, boolean sliderPressed) {
204cfd74d65d832137e20e193c960802afba73b5d38sm        mFlyButtonPressed = pressed;
205cfd74d65d832137e20e193c960802afba73b5d38sm        mStompButtonPressed = attackPressed;
2062b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mMovementSliderButtonPressed = sliderPressed;
207cfd74d65d832137e20e193c960802afba73b5d38sm    }
208cfd74d65d832137e20e193c960802afba73b5d38sm
209cfd74d65d832137e20e193c960802afba73b5d38sm    public void startFade(boolean in, float duration) {
210cfd74d65d832137e20e193c960802afba73b5d38sm        mFadeStartTime = sSystemRegistry.timeSystem.getRealTime();
211cfd74d65d832137e20e193c960802afba73b5d38sm        mFadeDuration = duration;
212cfd74d65d832137e20e193c960802afba73b5d38sm        mFadeIn = in;
213cfd74d65d832137e20e193c960802afba73b5d38sm        mFading = true;
214cfd74d65d832137e20e193c960802afba73b5d38sm    }
215cfd74d65d832137e20e193c960802afba73b5d38sm
216cfd74d65d832137e20e193c960802afba73b5d38sm    public void clearFade() {
217cfd74d65d832137e20e193c960802afba73b5d38sm        mFading = false;
218cfd74d65d832137e20e193c960802afba73b5d38sm    }
219cfd74d65d832137e20e193c960802afba73b5d38sm
220cfd74d65d832137e20e193c960802afba73b5d38sm    public boolean isFading() {
221cfd74d65d832137e20e193c960802afba73b5d38sm        return mFading;
222cfd74d65d832137e20e193c960802afba73b5d38sm    }
223cfd74d65d832137e20e193c960802afba73b5d38sm
224cfd74d65d832137e20e193c960802afba73b5d38sm    public void updateInventory(InventoryComponent.UpdateRecord newInventory) {
225cfd74d65d832137e20e193c960802afba73b5d38sm    	mCoinDigitsChanged = (mCoinCount != newInventory.coinCount);
226cfd74d65d832137e20e193c960802afba73b5d38sm    	mRubyDigitsChanged = (mRubyCount != newInventory.rubyCount);
227cfd74d65d832137e20e193c960802afba73b5d38sm
228cfd74d65d832137e20e193c960802afba73b5d38sm        mCoinCount = newInventory.coinCount;
229cfd74d65d832137e20e193c960802afba73b5d38sm        mRubyCount = newInventory.rubyCount;
230cfd74d65d832137e20e193c960802afba73b5d38sm    }
2319d4cc2572d37983607df38b0f4216ed76ac51814sm
2329d4cc2572d37983607df38b0f4216ed76ac51814sm    public void setFPS(int fps) {
2339d4cc2572d37983607df38b0f4216ed76ac51814sm    	mFPSDigitsChanged = (fps != mFPS);
2349d4cc2572d37983607df38b0f4216ed76ac51814sm    	mFPS = fps;
2359d4cc2572d37983607df38b0f4216ed76ac51814sm    }
2369d4cc2572d37983607df38b0f4216ed76ac51814sm
2379d4cc2572d37983607df38b0f4216ed76ac51814sm    public void setShowFPS(boolean show) {
2389d4cc2572d37983607df38b0f4216ed76ac51814sm    	mShowFPS = show;
2399d4cc2572d37983607df38b0f4216ed76ac51814sm    }
2402b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
2412b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    public void setMovementSliderMode(boolean sliderOn) {
2422b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    	mMovementSliderMode = sliderOn;
2432b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    	if (sliderOn) {
2442b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    		ContextParameters params = sSystemRegistry.contextParameters;
2452b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    		mFlyButtonLocation.set(params.gameWidth - FLY_BUTTON_WIDTH - FLY_BUTTON_X, FLY_BUTTON_Y);
2462b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    		mStompButtonLocation.set(params.gameWidth - STOMP_BUTTON_WIDTH - STOMP_BUTTON_X, STOMP_BUTTON_Y);
2472b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    	} else {
2482b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    		mFlyButtonLocation.set(FLY_BUTTON_X, FLY_BUTTON_Y);
2492b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    		mStompButtonLocation.set(STOMP_BUTTON_X, STOMP_BUTTON_Y);
2502b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    	}
2512b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    }
2522b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    public void setMovementSliderOffset(float offset) {
2532b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm        mMovementSliderButtonLocation.set(MOVEMENT_SLIDER_BUTTON_X + (offset * (MOVEMENT_SLIDER_WIDTH / 2.0f)), MOVEMENT_SLIDER_BUTTON_Y);
2542b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm    }
255cfd74d65d832137e20e193c960802afba73b5d38sm
256cfd74d65d832137e20e193c960802afba73b5d38sm    @Override
257cfd74d65d832137e20e193c960802afba73b5d38sm    public void update(float timeDelta, BaseObject parent) {
258cfd74d65d832137e20e193c960802afba73b5d38sm        final RenderSystem render = sSystemRegistry.renderSystem;
259cfd74d65d832137e20e193c960802afba73b5d38sm        final VectorPool pool = sSystemRegistry.vectorPool;
260cfd74d65d832137e20e193c960802afba73b5d38sm        final ContextParameters params = sSystemRegistry.contextParameters;
261cfd74d65d832137e20e193c960802afba73b5d38sm        final DrawableFactory factory = sSystemRegistry.drawableFactory;
262cfd74d65d832137e20e193c960802afba73b5d38sm
263cfd74d65d832137e20e193c960802afba73b5d38sm        final GameObjectManager manager = sSystemRegistry.gameObjectManager;
264cfd74d65d832137e20e193c960802afba73b5d38sm
265cfd74d65d832137e20e193c960802afba73b5d38sm        if (manager != null && manager.getPlayer() != null) {
266cfd74d65d832137e20e193c960802afba73b5d38sm        	// Only draw player-specific HUD elements when there's a player.
267cfd74d65d832137e20e193c960802afba73b5d38sm	        if (mFuelDrawable != null && mFuelBackgroundDrawable != null
268cfd74d65d832137e20e193c960802afba73b5d38sm	                && render != null && pool != null && factory != null && params != null) {
269cfd74d65d832137e20e193c960802afba73b5d38sm	            if (mFuelPercent < mFuelTargetPercent) {
270cfd74d65d832137e20e193c960802afba73b5d38sm	                mFuelPercent += (FUEL_INCREASE_BAR_SPEED * timeDelta);
271cfd74d65d832137e20e193c960802afba73b5d38sm	                if (mFuelPercent > mFuelTargetPercent) {
272cfd74d65d832137e20e193c960802afba73b5d38sm	                    mFuelPercent = mFuelTargetPercent;
273cfd74d65d832137e20e193c960802afba73b5d38sm	                }
274cfd74d65d832137e20e193c960802afba73b5d38sm	            } else if (mFuelPercent > mFuelTargetPercent) {
275cfd74d65d832137e20e193c960802afba73b5d38sm	                mFuelPercent -= (FUEL_DECREASE_BAR_SPEED * timeDelta);
276cfd74d65d832137e20e193c960802afba73b5d38sm	                if (mFuelPercent < mFuelTargetPercent) {
277cfd74d65d832137e20e193c960802afba73b5d38sm	                    mFuelPercent = mFuelTargetPercent;
278cfd74d65d832137e20e193c960802afba73b5d38sm	                }
279cfd74d65d832137e20e193c960802afba73b5d38sm	            }
280cfd74d65d832137e20e193c960802afba73b5d38sm
281cfd74d65d832137e20e193c960802afba73b5d38sm	            if (mFuelBackgroundDrawable.getWidth() == 0) {
282cfd74d65d832137e20e193c960802afba73b5d38sm	                // first time init
283cfd74d65d832137e20e193c960802afba73b5d38sm	                Texture tex = mFuelDrawable.getTexture();
284cfd74d65d832137e20e193c960802afba73b5d38sm	                mFuelDrawable.resize(tex.width, tex.height);
285cfd74d65d832137e20e193c960802afba73b5d38sm	                Texture backgroundTex = mFuelBackgroundDrawable.getTexture();
286cfd74d65d832137e20e193c960802afba73b5d38sm	                mFuelBackgroundDrawable.resize(backgroundTex.width, backgroundTex.height);
287cfd74d65d832137e20e193c960802afba73b5d38sm	            }
288cfd74d65d832137e20e193c960802afba73b5d38sm
289cfd74d65d832137e20e193c960802afba73b5d38sm	            final int height = mFuelDrawable.getHeight();
290cfd74d65d832137e20e193c960802afba73b5d38sm
291cfd74d65d832137e20e193c960802afba73b5d38sm
292cfd74d65d832137e20e193c960802afba73b5d38sm	            Vector2 location = pool.allocate();
293cfd74d65d832137e20e193c960802afba73b5d38sm	            location.set(FUEL_BAR_EDGE_PADDING,
294cfd74d65d832137e20e193c960802afba73b5d38sm	                    params.gameHeight - height - FUEL_BAR_EDGE_PADDING);
295cfd74d65d832137e20e193c960802afba73b5d38sm	            render.scheduleForDraw(mFuelBackgroundDrawable, location, SortConstants.HUD, false);
296cfd74d65d832137e20e193c960802afba73b5d38sm	            location.x += 2;
297cfd74d65d832137e20e193c960802afba73b5d38sm	            location.y += 2;
298cfd74d65d832137e20e193c960802afba73b5d38sm	            final int barWidth = (int)((100 - 4) * mFuelPercent);
299cfd74d65d832137e20e193c960802afba73b5d38sm	            if (barWidth >= 1) {
300cfd74d65d832137e20e193c960802afba73b5d38sm		            DrawableBitmap bitmap = factory.allocateDrawableBitmap();
301cfd74d65d832137e20e193c960802afba73b5d38sm		            if (bitmap != null) {
302cfd74d65d832137e20e193c960802afba73b5d38sm		                bitmap.resize(barWidth, mFuelDrawable.getHeight());
303cfd74d65d832137e20e193c960802afba73b5d38sm		                bitmap.setTexture(mFuelDrawable.getTexture());
304cfd74d65d832137e20e193c960802afba73b5d38sm		                render.scheduleForDraw(bitmap, location, SortConstants.HUD + 1, false);
305cfd74d65d832137e20e193c960802afba73b5d38sm		            }
306cfd74d65d832137e20e193c960802afba73b5d38sm	            }
307cfd74d65d832137e20e193c960802afba73b5d38sm
308cfd74d65d832137e20e193c960802afba73b5d38sm	            pool.release(location);
309cfd74d65d832137e20e193c960802afba73b5d38sm	        }
310cfd74d65d832137e20e193c960802afba73b5d38sm
311cfd74d65d832137e20e193c960802afba73b5d38sm	        if (mFlyButtonDisabledDrawable != null && mFlyButtonEnabledDrawable != null
312cfd74d65d832137e20e193c960802afba73b5d38sm	                && mFlyButtonDepressedDrawable != null) {
313cfd74d65d832137e20e193c960802afba73b5d38sm
314cfd74d65d832137e20e193c960802afba73b5d38sm	            DrawableBitmap bitmap = mFlyButtonEnabledDrawable;
315cfd74d65d832137e20e193c960802afba73b5d38sm	            if (mFlyButtonActive && mFlyButtonPressed) {
316cfd74d65d832137e20e193c960802afba73b5d38sm	                bitmap = mFlyButtonDepressedDrawable;
317cfd74d65d832137e20e193c960802afba73b5d38sm	            } else if (!mFlyButtonActive) {
318cfd74d65d832137e20e193c960802afba73b5d38sm	                bitmap = mFlyButtonDisabledDrawable;
319cfd74d65d832137e20e193c960802afba73b5d38sm	            }
320cfd74d65d832137e20e193c960802afba73b5d38sm
321cfd74d65d832137e20e193c960802afba73b5d38sm	            if (bitmap.getWidth() == 0) {
322cfd74d65d832137e20e193c960802afba73b5d38sm	                // first time init
323cfd74d65d832137e20e193c960802afba73b5d38sm	                Texture tex = bitmap.getTexture();
324cfd74d65d832137e20e193c960802afba73b5d38sm	                bitmap.resize(tex.width, tex.height);
325cfd74d65d832137e20e193c960802afba73b5d38sm	            }
326cfd74d65d832137e20e193c960802afba73b5d38sm
327cfd74d65d832137e20e193c960802afba73b5d38sm	            render.scheduleForDraw(bitmap, mFlyButtonLocation, SortConstants.HUD, false);
328cfd74d65d832137e20e193c960802afba73b5d38sm	        }
329cfd74d65d832137e20e193c960802afba73b5d38sm
3302b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
3312b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
332cfd74d65d832137e20e193c960802afba73b5d38sm	        if (mStompButtonEnabledDrawable != null && mStompButtonDepressedDrawable != null) {
333cfd74d65d832137e20e193c960802afba73b5d38sm
334cfd74d65d832137e20e193c960802afba73b5d38sm	            DrawableBitmap bitmap = mStompButtonEnabledDrawable;
335cfd74d65d832137e20e193c960802afba73b5d38sm	            if (mStompButtonPressed) {
336cfd74d65d832137e20e193c960802afba73b5d38sm	                bitmap = mStompButtonDepressedDrawable;
337cfd74d65d832137e20e193c960802afba73b5d38sm	            }
338cfd74d65d832137e20e193c960802afba73b5d38sm
339cfd74d65d832137e20e193c960802afba73b5d38sm	            if (bitmap.getWidth() == 0) {
340cfd74d65d832137e20e193c960802afba73b5d38sm	                // first time init
341cfd74d65d832137e20e193c960802afba73b5d38sm	                Texture tex = bitmap.getTexture();
342cfd74d65d832137e20e193c960802afba73b5d38sm	                bitmap.resize(tex.width, tex.height);
343cfd74d65d832137e20e193c960802afba73b5d38sm	                bitmap.setWidth((int)(tex.width * STOMP_BUTTON_SCALE));
344cfd74d65d832137e20e193c960802afba73b5d38sm	                bitmap.setHeight((int)(tex.height * STOMP_BUTTON_SCALE));
345cfd74d65d832137e20e193c960802afba73b5d38sm	            }
346cfd74d65d832137e20e193c960802afba73b5d38sm
347cfd74d65d832137e20e193c960802afba73b5d38sm	            render.scheduleForDraw(bitmap, mStompButtonLocation, SortConstants.HUD, false);
348cfd74d65d832137e20e193c960802afba73b5d38sm	        }
349cfd74d65d832137e20e193c960802afba73b5d38sm
3502b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	        if (mMovementSliderMode &&
3512b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	        		mMovementSliderBaseDrawable != null && mMovementSliderButtonDrawable != null) {
3522b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
3532b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	            if (mMovementSliderBaseDrawable.getWidth() == 0) {
3542b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	                // first time init
3552b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	                Texture tex = mMovementSliderBaseDrawable.getTexture();
3562b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	                mMovementSliderBaseDrawable.resize(tex.width, tex.height);
3572b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	            }
3582b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
3592b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	            if (mMovementSliderButtonDrawable.getWidth() == 0) {
3602b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	                // first time init
3612b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	                Texture tex = mMovementSliderButtonDrawable.getTexture();
3622b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	                mMovementSliderButtonDrawable.resize(tex.width, tex.height);
3632b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	            }
3642b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
3652b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	            if (mMovementSliderButtonDepressedDrawable.getWidth() == 0) {
3662b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	                // first time init
3672b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	                Texture tex = mMovementSliderButtonDepressedDrawable.getTexture();
3682b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	                mMovementSliderButtonDepressedDrawable.resize(tex.width, tex.height);
3692b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	            }
3702b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
3712b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	            DrawableBitmap bitmap = mMovementSliderButtonDrawable;
3722b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
3732b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	            if (mMovementSliderButtonPressed) {
3742b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	            	bitmap = mMovementSliderButtonDepressedDrawable;
3752b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	            }
3762b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
3772b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	            render.scheduleForDraw(mMovementSliderBaseDrawable, mMovementSliderBaseLocation, SortConstants.HUD, false);
3782b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	            render.scheduleForDraw(bitmap, mMovementSliderButtonLocation, SortConstants.HUD + 1, false);
3792b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
3802b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	        }
3812b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
3822b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
383cfd74d65d832137e20e193c960802afba73b5d38sm	        if (mCoinDrawable != null) {
384cfd74d65d832137e20e193c960802afba73b5d38sm	            if (mCoinDrawable.getWidth() == 0) {
385cfd74d65d832137e20e193c960802afba73b5d38sm	                // first time init
386cfd74d65d832137e20e193c960802afba73b5d38sm	                Texture tex = mCoinDrawable.getTexture();
387cfd74d65d832137e20e193c960802afba73b5d38sm	                mCoinDrawable.resize(tex.width, tex.height);
388cfd74d65d832137e20e193c960802afba73b5d38sm	                mCoinLocation.x = (params.gameWidth / 2.0f) - tex.width / 2.0f;
389cfd74d65d832137e20e193c960802afba73b5d38sm	                mCoinLocation.y = params.gameHeight - tex.height - COLLECTABLE_EDGE_PADDING;
390cfd74d65d832137e20e193c960802afba73b5d38sm	            }
391cfd74d65d832137e20e193c960802afba73b5d38sm
392cfd74d65d832137e20e193c960802afba73b5d38sm	            render.scheduleForDraw(mCoinDrawable, mCoinLocation, SortConstants.HUD, false);
393cfd74d65d832137e20e193c960802afba73b5d38sm	            if (mCoinDigitsChanged) {
394cfd74d65d832137e20e193c960802afba73b5d38sm	            	intToDigitArray(mCoinCount, mCoinDigits);
395cfd74d65d832137e20e193c960802afba73b5d38sm	            	mCoinDigitsChanged = false;
396cfd74d65d832137e20e193c960802afba73b5d38sm	            }
397cfd74d65d832137e20e193c960802afba73b5d38sm	            final float offset = mCoinDrawable.getWidth() * 0.75f;
398cfd74d65d832137e20e193c960802afba73b5d38sm	            mCoinLocation.x += offset;
3999d4cc2572d37983607df38b0f4216ed76ac51814sm	            drawNumber(mCoinLocation, mCoinDigits, true);
400cfd74d65d832137e20e193c960802afba73b5d38sm	            mCoinLocation.x -= offset;
401cfd74d65d832137e20e193c960802afba73b5d38sm	        }
402cfd74d65d832137e20e193c960802afba73b5d38sm
403cfd74d65d832137e20e193c960802afba73b5d38sm	        if (mRubyDrawable != null) {
404cfd74d65d832137e20e193c960802afba73b5d38sm	            if (mRubyDrawable.getWidth() == 0) {
405cfd74d65d832137e20e193c960802afba73b5d38sm	                // first time init
406cfd74d65d832137e20e193c960802afba73b5d38sm	                Texture tex = mRubyDrawable.getTexture();
407cfd74d65d832137e20e193c960802afba73b5d38sm	                mRubyDrawable.resize(tex.width, tex.height);
408cfd74d65d832137e20e193c960802afba73b5d38sm	                mRubyLocation.x = (params.gameWidth / 2.0f) + 100.0f;
409cfd74d65d832137e20e193c960802afba73b5d38sm	                mRubyLocation.y = params.gameHeight - tex.height - COLLECTABLE_EDGE_PADDING;
410cfd74d65d832137e20e193c960802afba73b5d38sm	            }
411cfd74d65d832137e20e193c960802afba73b5d38sm	            render.scheduleForDraw(mRubyDrawable, mRubyLocation, SortConstants.HUD, false);
412cfd74d65d832137e20e193c960802afba73b5d38sm	            if (mRubyDigitsChanged) {
413cfd74d65d832137e20e193c960802afba73b5d38sm	            	intToDigitArray(mRubyCount, mRubyDigits);
414cfd74d65d832137e20e193c960802afba73b5d38sm	            	mRubyDigitsChanged = false;
415cfd74d65d832137e20e193c960802afba73b5d38sm	            }
416cfd74d65d832137e20e193c960802afba73b5d38sm	            final float offset = mRubyDrawable.getWidth() * 0.75f;
417cfd74d65d832137e20e193c960802afba73b5d38sm	            mRubyLocation.x += offset;
4189d4cc2572d37983607df38b0f4216ed76ac51814sm	            drawNumber(mRubyLocation, mRubyDigits, true);
419cfd74d65d832137e20e193c960802afba73b5d38sm	            mRubyLocation.x -= offset;
420cfd74d65d832137e20e193c960802afba73b5d38sm	        }
421cfd74d65d832137e20e193c960802afba73b5d38sm        }
422cfd74d65d832137e20e193c960802afba73b5d38sm
4239d4cc2572d37983607df38b0f4216ed76ac51814sm        if (mShowFPS) {
4249d4cc2572d37983607df38b0f4216ed76ac51814sm        	if (mFPSDigitsChanged) {
4259d4cc2572d37983607df38b0f4216ed76ac51814sm            	int count = intToDigitArray(mFPS, mFPSDigits);
4269d4cc2572d37983607df38b0f4216ed76ac51814sm            	mFPSDigitsChanged = false;
4272b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm                mFPSLocation.set(params.gameWidth - 10.0f - ((count + 1) * (mDigitDrawables[0].getWidth() / 2.0f)), 10.0f);
4289d4cc2572d37983607df38b0f4216ed76ac51814sm
4299d4cc2572d37983607df38b0f4216ed76ac51814sm            }
4309d4cc2572d37983607df38b0f4216ed76ac51814sm            drawNumber(mFPSLocation, mFPSDigits, false);
4319d4cc2572d37983607df38b0f4216ed76ac51814sm        }
4329d4cc2572d37983607df38b0f4216ed76ac51814sm
433cfd74d65d832137e20e193c960802afba73b5d38sm        if (mFading && factory != null) {
434cfd74d65d832137e20e193c960802afba73b5d38sm
435cfd74d65d832137e20e193c960802afba73b5d38sm            final float time = sSystemRegistry.timeSystem.getRealTime();
436cfd74d65d832137e20e193c960802afba73b5d38sm            final float fadeDelta = (time - mFadeStartTime);
437cfd74d65d832137e20e193c960802afba73b5d38sm
438cfd74d65d832137e20e193c960802afba73b5d38sm            float percentComplete = 1.0f;
439cfd74d65d832137e20e193c960802afba73b5d38sm            if (fadeDelta < mFadeDuration) {
440cfd74d65d832137e20e193c960802afba73b5d38sm                percentComplete = fadeDelta / mFadeDuration;
441cfd74d65d832137e20e193c960802afba73b5d38sm            } else if (mFadeIn) {
442cfd74d65d832137e20e193c960802afba73b5d38sm                // We've faded in.  Turn fading off.
443cfd74d65d832137e20e193c960802afba73b5d38sm                mFading = false;
444cfd74d65d832137e20e193c960802afba73b5d38sm            }
445cfd74d65d832137e20e193c960802afba73b5d38sm
446cfd74d65d832137e20e193c960802afba73b5d38sm            if (percentComplete < 1.0f || !mFadeIn) {
447cfd74d65d832137e20e193c960802afba73b5d38sm                float opacityValue = percentComplete;
448cfd74d65d832137e20e193c960802afba73b5d38sm                if (mFadeIn) {
449cfd74d65d832137e20e193c960802afba73b5d38sm                    opacityValue = 1.0f - percentComplete;
450cfd74d65d832137e20e193c960802afba73b5d38sm                }
451cfd74d65d832137e20e193c960802afba73b5d38sm
452cfd74d65d832137e20e193c960802afba73b5d38sm                DrawableBitmap bitmap = factory.allocateDrawableBitmap();
453cfd74d65d832137e20e193c960802afba73b5d38sm                if (bitmap != null) {
454cfd74d65d832137e20e193c960802afba73b5d38sm                    bitmap.setWidth(params.gameWidth);
455cfd74d65d832137e20e193c960802afba73b5d38sm                    bitmap.setHeight(params.gameHeight);
456cfd74d65d832137e20e193c960802afba73b5d38sm                    bitmap.setTexture(mFadeTexture);
457cfd74d65d832137e20e193c960802afba73b5d38sm                    bitmap.setCrop(0, mFadeTexture.height, mFadeTexture.width, mFadeTexture.height);
458cfd74d65d832137e20e193c960802afba73b5d38sm                    bitmap.setOpacity(opacityValue);
459cfd74d65d832137e20e193c960802afba73b5d38sm                    render.scheduleForDraw(bitmap, Vector2.ZERO, SortConstants.FADE, false);
460cfd74d65d832137e20e193c960802afba73b5d38sm                }
461cfd74d65d832137e20e193c960802afba73b5d38sm            }
462cfd74d65d832137e20e193c960802afba73b5d38sm
463cfd74d65d832137e20e193c960802afba73b5d38sm            if (percentComplete >= 1.0f && mFadePendingEventType != GameFlowEvent.EVENT_INVALID) {
464cfd74d65d832137e20e193c960802afba73b5d38sm            	LevelSystem level = sSystemRegistry.levelSystem;
465cfd74d65d832137e20e193c960802afba73b5d38sm            	if (level != null) {
466cfd74d65d832137e20e193c960802afba73b5d38sm            		level.sendGameEvent(mFadePendingEventType, mFadePendingEventIndex, false);
467cfd74d65d832137e20e193c960802afba73b5d38sm            		mFadePendingEventType = GameFlowEvent.EVENT_INVALID;
468cfd74d65d832137e20e193c960802afba73b5d38sm            		mFadePendingEventIndex = 0;
469cfd74d65d832137e20e193c960802afba73b5d38sm            	}
470cfd74d65d832137e20e193c960802afba73b5d38sm            }
471cfd74d65d832137e20e193c960802afba73b5d38sm        }
472cfd74d65d832137e20e193c960802afba73b5d38sm    }
473cfd74d65d832137e20e193c960802afba73b5d38sm
4749d4cc2572d37983607df38b0f4216ed76ac51814sm    private void drawNumber(Vector2 location, int[] digits, boolean drawX) {
475cfd74d65d832137e20e193c960802afba73b5d38sm        final RenderSystem render = sSystemRegistry.renderSystem;
476cfd74d65d832137e20e193c960802afba73b5d38sm
477cfd74d65d832137e20e193c960802afba73b5d38sm        if (mDigitDrawables[0].getWidth() == 0) {
478cfd74d65d832137e20e193c960802afba73b5d38sm            // first time init
479cfd74d65d832137e20e193c960802afba73b5d38sm            for (int x = 0; x < mDigitDrawables.length; x++) {
480cfd74d65d832137e20e193c960802afba73b5d38sm                Texture tex = mDigitDrawables[x].getTexture();
481cfd74d65d832137e20e193c960802afba73b5d38sm                mDigitDrawables[x].resize(tex.width, tex.height);
482cfd74d65d832137e20e193c960802afba73b5d38sm            }
483cfd74d65d832137e20e193c960802afba73b5d38sm        }
484cfd74d65d832137e20e193c960802afba73b5d38sm
485cfd74d65d832137e20e193c960802afba73b5d38sm        if (mXDrawable.getWidth() == 0) {
486cfd74d65d832137e20e193c960802afba73b5d38sm            // first time init
487cfd74d65d832137e20e193c960802afba73b5d38sm            Texture tex = mXDrawable.getTexture();
488cfd74d65d832137e20e193c960802afba73b5d38sm            mXDrawable.resize(tex.width, tex.height);
489cfd74d65d832137e20e193c960802afba73b5d38sm        }
490cfd74d65d832137e20e193c960802afba73b5d38sm
491cfd74d65d832137e20e193c960802afba73b5d38sm        final float characterWidth = mDigitDrawables[0].getWidth() / 2.0f;
492cfd74d65d832137e20e193c960802afba73b5d38sm        float offset = 0.0f;
493cfd74d65d832137e20e193c960802afba73b5d38sm
4949d4cc2572d37983607df38b0f4216ed76ac51814sm        if (mXDrawable != null && drawX) {
495cfd74d65d832137e20e193c960802afba73b5d38sm            render.scheduleForDraw(mXDrawable, location, SortConstants.HUD, false);
4969d4cc2572d37983607df38b0f4216ed76ac51814sm            location.x += characterWidth;
4979d4cc2572d37983607df38b0f4216ed76ac51814sm            offset += characterWidth;
498cfd74d65d832137e20e193c960802afba73b5d38sm         }
499cfd74d65d832137e20e193c960802afba73b5d38sm
500cfd74d65d832137e20e193c960802afba73b5d38sm        for (int x = 0; x < digits.length && digits[x] != -1; x++) {
501cfd74d65d832137e20e193c960802afba73b5d38sm            int index = digits[x];
502cfd74d65d832137e20e193c960802afba73b5d38sm            DrawableBitmap digit = mDigitDrawables[index];
503cfd74d65d832137e20e193c960802afba73b5d38sm            if (digit != null) {
504cfd74d65d832137e20e193c960802afba73b5d38sm                render.scheduleForDraw(digit, location, SortConstants.HUD, false);
5059d4cc2572d37983607df38b0f4216ed76ac51814sm                location.x += characterWidth;
5069d4cc2572d37983607df38b0f4216ed76ac51814sm                offset += characterWidth;
507cfd74d65d832137e20e193c960802afba73b5d38sm            }
508cfd74d65d832137e20e193c960802afba73b5d38sm        }
509cfd74d65d832137e20e193c960802afba73b5d38sm
510cfd74d65d832137e20e193c960802afba73b5d38sm        location.x -= offset;
511cfd74d65d832137e20e193c960802afba73b5d38sm
512cfd74d65d832137e20e193c960802afba73b5d38sm
513cfd74d65d832137e20e193c960802afba73b5d38sm    }
514cfd74d65d832137e20e193c960802afba73b5d38sm
515cfd74d65d832137e20e193c960802afba73b5d38sm    public int intToDigitArray(int value, int[] digits) {
516cfd74d65d832137e20e193c960802afba73b5d38sm    	int characterCount = 1;
517cfd74d65d832137e20e193c960802afba73b5d38sm        if (value >= 1000) {
518cfd74d65d832137e20e193c960802afba73b5d38sm            characterCount = 4;
519cfd74d65d832137e20e193c960802afba73b5d38sm        } else if (value >= 100) {
520cfd74d65d832137e20e193c960802afba73b5d38sm            characterCount = 3;
521cfd74d65d832137e20e193c960802afba73b5d38sm        } else if (value >= 10) {
522cfd74d65d832137e20e193c960802afba73b5d38sm            characterCount = 2;
523cfd74d65d832137e20e193c960802afba73b5d38sm        }
524cfd74d65d832137e20e193c960802afba73b5d38sm
525cfd74d65d832137e20e193c960802afba73b5d38sm    	int remainingValue = value;
526cfd74d65d832137e20e193c960802afba73b5d38sm        int count = 0;
527cfd74d65d832137e20e193c960802afba73b5d38sm	    do {
528cfd74d65d832137e20e193c960802afba73b5d38sm	        int index = remainingValue != 0 ? remainingValue % 10 : 0;
529cfd74d65d832137e20e193c960802afba73b5d38sm	        remainingValue /= 10;
530cfd74d65d832137e20e193c960802afba73b5d38sm	        digits[characterCount - 1 - count] = index;
531cfd74d65d832137e20e193c960802afba73b5d38sm	        count++;
532cfd74d65d832137e20e193c960802afba73b5d38sm	    } while (remainingValue > 0 && count < digits.length);
533cfd74d65d832137e20e193c960802afba73b5d38sm
534cfd74d65d832137e20e193c960802afba73b5d38sm	    if (count < digits.length) {
535cfd74d65d832137e20e193c960802afba73b5d38sm	    	digits[count] = -1;
536cfd74d65d832137e20e193c960802afba73b5d38sm	    }
5372b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm	    return characterCount;
538cfd74d65d832137e20e193c960802afba73b5d38sm    }
5392b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm
540cfd74d65d832137e20e193c960802afba73b5d38sm	public void sendGameEventOnFadeComplete(int eventType, int eventIndex) {
541cfd74d65d832137e20e193c960802afba73b5d38sm		mFadePendingEventType = eventType;
542cfd74d65d832137e20e193c960802afba73b5d38sm		mFadePendingEventIndex = eventIndex;
543cfd74d65d832137e20e193c960802afba73b5d38sm	}
544cfd74d65d832137e20e193c960802afba73b5d38sm
545cfd74d65d832137e20e193c960802afba73b5d38sm
546cfd74d65d832137e20e193c960802afba73b5d38sm}
547