package com.gebauz.burutaru.game.entities;
import com.gebauz.bauzoid.game.StateMachine;
import com.gebauz.bauzoid.math.MathUtil;
import com.gebauz.bauzoid.math.Vector4;
import com.gebauz.burutaru.BurutaruCustomServices;
import com.gebauz.burutaru.GameConsts;
import com.gebauz.burutaru.game.GameLogic;
public class IntroOutroTextDisplay
extends Entity implements StateMachine.
EventListener<IntroOutroTextDisplay.
IntroState>
{
// Constants========================================================================================
public static final float INTRO_FADE_IN = 0.8f
;
public static final float INTRO_WAIT = 1.5f
;
public static final float INTRO_FADE_OUT = 0.8f
;
public static final float INTRO_TOTAL_DURATION = INTRO_FADE_IN + INTRO_WAIT + INTRO_FADE_OUT
;
//public static final Vector4 INTRO_TEXT_COLOR = new Vector4(1, 1, 1, 1);
public static final Vector4 STAGE_TEXT_COLOR =
new Vector4
(0.75f, 0.95f, 0.55f,
1);
public static final Vector4 LEVEL_TEXT_COLOR =
new Vector4
(0.73f, 0.87f,
1,
1);
// Embedded Types===================================================================================
public enum IntroState
{
FADE_IN,
WAIT,
FADE_OUT
}
// Fields===========================================================================================
private boolean mIsIntroStarted =
false;
private StateMachine
<IntroState
> mIntroStates =
null;
private String mStageText =
"";
private float mStageTextStartX = 0.0f
;
private float mStageTextTargetX = 0.0f
;
private float mStageTextEndX = 0.0f
;
private float mStageTextPosY = 0.0f
;
private String mLevelText =
"";
private float mLevelTextStartX = 0.0f
;
private float mLevelTextTargetX = 0.0f
;
private float mLevelTextEndX = 0.0f
;
private float mLevelTextPosY = 0.0f
;
// Methods==========================================================================================
public IntroOutroTextDisplay
(GameLogic gameLogic
)
{
super(gameLogic
);
mIntroStates =
new StateMachine
<IntroState
>(IntroState.
FADE_IN,
this);
}
@
Override
public void initAsync
()
{
}
@
Override
public void init
()
{
}
@
Override
public void exit
()
{
}
@
Override
public void update
(float deltaTime
)
{
if (mIsIntroStarted
)
{
mIntroStates.
update(deltaTime
);
}
}
@
Override
public void render
()
{
BurutaruCustomServices s =
(BurutaruCustomServices
)getGame
().
getCustomServices();
if (mIsIntroStarted
)
{
float stageX = mStageTextStartX
;
float levelX = mStageTextStartX
;
switch (mIntroStates.
getState())
{
case FADE_IN:
{
float diffX = mStageTextTargetX - mStageTextStartX
;
stageX = mStageTextStartX + diffX
* MathUtil.
easeInOut(mIntroStates.
getStateTime() / INTRO_FADE_IN
);
diffX = mLevelTextTargetX - mLevelTextStartX
;
levelX = mLevelTextStartX + diffX
* MathUtil.
easeInOut(mIntroStates.
getStateTime() / INTRO_FADE_IN
);
}
break;
case WAIT:
{
stageX = mStageTextTargetX
;
levelX = mLevelTextTargetX
;
}
break;
case FADE_OUT:
{
float diffX = mStageTextEndX - mStageTextTargetX
;
stageX = mStageTextTargetX + diffX
* MathUtil.
easeInOut(mIntroStates.
getStateTime() / INTRO_FADE_OUT
);
diffX = mLevelTextEndX - mLevelTextTargetX
;
levelX = mLevelTextTargetX + diffX
* MathUtil.
easeInOut(mIntroStates.
getStateTime() / INTRO_FADE_OUT
);
}
break;
}
s.
getPrettyFont().
drawText(mStageText, stageX, mStageTextPosY, STAGE_TEXT_COLOR
);
s.
getPrettyFont().
drawText(mLevelText, levelX, mLevelTextPosY, LEVEL_TEXT_COLOR
);
}
}
public void startIntroText
()
{
mIsIntroStarted =
true;
mIntroStates.
switchState(IntroState.
FADE_IN);
BurutaruCustomServices s =
(BurutaruCustomServices
)getGame
().
getCustomServices();
final float scale = 1.0f
;
mStageText =
"Stage 01";
float introW = s.
getPrettyFont().
getTextWidth(mStageText, scale
);
float introH = s.
getPrettyFont().
getTextHeight(mStageText, scale
);
mStageTextStartX = -
2*introW
;
mStageTextTargetX =
(GameConsts.
VIRTUAL_SCREEN_WIDTH - introW
) /
2;
mStageTextEndX = GameConsts.
VIRTUAL_SCREEN_WIDTH + introW
;
mStageTextPosY =
(GameConsts.
VIRTUAL_SCREEN_HEIGHT - introH
) /
2 - introH
;
mLevelText = getGameLogic
().
getLevel().
getLevelData().
getName();
introW = s.
getPrettyFont().
getTextWidth(mLevelText, scale
);
introH = s.
getPrettyFont().
getTextHeight(mLevelText, scale
);
mLevelTextStartX = GameConsts.
VIRTUAL_SCREEN_WIDTH + introW
;
mLevelTextTargetX =
(GameConsts.
VIRTUAL_SCREEN_WIDTH - introW
) /
2;
mLevelTextEndX = -
2*introW
;
mLevelTextPosY =
(GameConsts.
VIRTUAL_SCREEN_HEIGHT - introH
) /
2 + introH
;
}
@
Override
public boolean onSwitchState
(IntroState newState
)
{
return true;
}
@
Override
public void onUpdate
(float deltaTime, IntroState currentState,
float stateTime
)
{
switch (currentState
)
{
case FADE_IN:
if (stateTime
> INTRO_FADE_IN
)
mIntroStates.
switchState(IntroState.
WAIT);
break;
case WAIT:
if (stateTime
> INTRO_WAIT
)
mIntroStates.
switchState(IntroState.
FADE_OUT);
break;
case FADE_OUT:
if (stateTime
> INTRO_FADE_OUT
)
mIsIntroStarted =
false;
break;
}
}
@
Override
public void onEndState
(IntroState currentState
)
{
}
// Getters/Setters==================================================================================
}