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 float OUTRO_FADE_IN = 0.8f
;
//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);
public static final Vector4 OUTRO_FADE_TEXT_COLOR =
new Vector4
(0.73f, 0.87f,
1,
1);
public static final Vector4 OUTRO_FADE_TEXT_COLOR_ALPHA =
new Vector4
(0.73f, 0.87f,
1, 0.5f
);
// Embedded Types===================================================================================
public enum IntroState
{
FADE_IN,
WAIT,
FADE_OUT
}
// Fields===========================================================================================
private boolean mIsIntroStarted =
false;
private StateMachine
<IntroState
> mIntroStates =
null;
private boolean mIsOutroStarted =
false;
private float mOutroTimer = 0.0f
;
private String mOutroText =
"";
private float mOutroW = 0.0f
;
private float mOutroH = 0.0f
;
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
);
}
if (mIsOutroStarted
)
{
//BurutaruCustomServices s = (BurutaruCustomServices)getGame().getCustomServices();
mOutroTimer += deltaTime
;
/*float targetX = (GameConsts.VIRTUAL_SCREEN_WIDTH - mOutroW) * 0.5f;
float rightX = targetX;
float leftX = targetX;
float outroY = (GameConsts.VIRTUAL_SCREEN_HEIGHT - mOutroH) * 0.5f;
if (mOutroTimer >= OUTRO_FADE_IN)
{
s.getPrettyFont().drawText(mOutroText, leftX, outroY, OUTRO_FADE_TEXT_COLOR);
}
else
{
float t = mOutroTimer / OUTRO_FADE_IN;
float startLeftX = -2*mOutroW;
float startRightX = GameConsts.VIRTUAL_SCREEN_WIDTH + 2*mOutroW;
float diffLeftX = targetX - startLeftX;
leftX = startLeftX + diffLeftX * MathUtil.easeInOut(t);
float diffRightX = targetX - startRightX;
rightX = startRightX + diffRightX * MathUtil.easeInOut(t);
s.getPrettyFont().drawText(mOutroText, leftX, outroY, OUTRO_FADE_TEXT_COLOR_ALPHA);
s.getPrettyFont().drawText(mOutroText, rightX, outroY, OUTRO_FADE_TEXT_COLOR_ALPHA);
}*/
}
}
@
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
);
}
if (mIsOutroStarted
)
{
float targetX =
(GameConsts.
VIRTUAL_SCREEN_WIDTH - mOutroW
) * 0.5f
;
float rightX = targetX
;
float leftX = targetX
;
float outroY =
(GameConsts.
VIRTUAL_SCREEN_HEIGHT - mOutroH
) * 0.5f
;
if (mOutroTimer
>= OUTRO_FADE_IN
)
{
s.
getPrettyFont().
drawText(mOutroText, leftX, outroY, OUTRO_FADE_TEXT_COLOR, 2.0f
);
}
else
{
float t = mOutroTimer / OUTRO_FADE_IN
;
float startLeftX = -
2*mOutroW
;
float startRightX = GameConsts.
VIRTUAL_SCREEN_WIDTH +
2*mOutroW
;
float diffLeftX = targetX - startLeftX
;
leftX = startLeftX + diffLeftX
* MathUtil.
easeInOut(t
);
float diffRightX = targetX - startRightX
;
rightX = startRightX + diffRightX
* MathUtil.
easeInOut(t
);
s.
getPrettyFont().
drawText(mOutroText, leftX, outroY, OUTRO_FADE_TEXT_COLOR_ALPHA, 2.0f
);
s.
getPrettyFont().
drawText(mOutroText, rightX, outroY, OUTRO_FADE_TEXT_COLOR_ALPHA, 2.0f
);
}
}
}
public void startIntroText
()
{
mIsIntroStarted =
true;
mIntroStates.
switchState(IntroState.
FADE_IN);
BurutaruCustomServices s =
(BurutaruCustomServices
)getGame
().
getCustomServices();
final float scale = 1.0f
;
mStageText = getGameLogic
().
getLevel().
getLevelData().
getStage();
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
)
{
}
public void startOutro
(String outroText
)
{
mOutroText = outroText
;
mIsOutroStarted =
true;
mOutroTimer = 0.0f
;
final float scale = 2.0f
;
BurutaruCustomServices s =
(BurutaruCustomServices
)getGame
().
getCustomServices();
mOutroW = s.
getPrettyFont().
getTextWidth(mOutroText, scale
);
mOutroH = s.
getPrettyFont().
getTextHeight(mOutroText, scale
);
}
// Getters/Setters==================================================================================
}