package com.gebauz.burutaru.game.entities.level;
import java.io.IOException;
import com.gebauz.bauzoid.file.File;
import com.gebauz.bauzoid.math.MathUtil;
import com.gebauz.bauzoid.math.Vector2;
import com.gebauz.bauzoid.parser.ParseUtil;
import com.gebauz.bauzoid.parser.ScanException;
import com.gebauz.bauzoid.parser.Tokenizer;
import com.gebauz.burutaru.game.entities.StarField;
import com.gebauz.burutaru.game.entities.level.conditions.BaseCondition;
public class CheckPoint
extends LevelObject
{
// Constants========================================================================================
public static final float DEFAULT_SCROLL_SPEED = 10.0f
;
// Embedded Types===================================================================================
// Fields===========================================================================================
private Vector2 mPosition =
new Vector2
();
private Vector2 mFreeScroll =
new Vector2
();
private String mContinueConditionName =
null;
private StarField.
Status mStarFieldStatus = StarField.
Status.
DISABLED;
private float mStarFieldStatusSwitchTime = 0.0f
;
private BaseCondition mContinueCondition =
null;
private float mScrollSpeed = DEFAULT_SCROLL_SPEED
;
// Methods==========================================================================================
public CheckPoint
(Level level,
String name
)
{
super(level, name
);
}
@
Override
public void initAsync
()
{
}
@
Override
public void init
()
{
if (mContinueConditionName
!=
null)
mContinueCondition = getLevel
().
getLevelData().
findCondition(mContinueConditionName
);
}
@
Override
public void exit
()
{
}
@
Override
public void update
(float deltaTime
)
{
}
public void readBinary
(File file
) throws IOException
{
mPosition = file.
readVector2();
mFreeScroll = file.
readVector2();
mContinueConditionName = file.
readString();
mScrollSpeed = file.
readFloat();
int status = file.
readInt();
StarField.
Status[] values = StarField.
Status.
values();
mStarFieldStatus = values
[MathUtil.
clamp(status,
0, values.
length-
1)];
mStarFieldStatusSwitchTime = file.
readFloat();
}
@
Override
public boolean readParameter
(Tokenizer t,
String id
) throws ScanException
{
if (id.
equalsIgnoreCase("position"))
{
mPosition = ParseUtil.
readVector2(t
);
}
else if (id.
equalsIgnoreCase("freeScroll"))
{
mFreeScroll = ParseUtil.
readVector2(t
);
}
else if (id.
equalsIgnoreCase("continueCondition"))
{
mContinueConditionName = t.
readString();
}
else if (id.
equalsIgnoreCase("scrollSpeed"))
{
mScrollSpeed = t.
readNumber();
}
else if (id.
equalsIgnoreCase("starFieldStatus"))
{
int status =
(int)t.
readNumber();
StarField.
Status[] values = StarField.
Status.
values();
mStarFieldStatus = values
[MathUtil.
clamp(status,
0, values.
length-
1)];
}
else if (id.
equalsIgnoreCase("starFieldStatusSwitchTime"))
{
mStarFieldStatusSwitchTime = t.
readNumber();
}
else
{
return super.
readParameter(t, id
);
}
t.
readToken(";");
return true;
}
/** Check if the condition for continuing with the next checkpoint is met. */
public boolean isReadyForNextCheckPoint
()
{
if (mContinueCondition ==
null)
return true;
return mContinueCondition.
isMet();
}
// Getters/Setters==================================================================================
public final Vector2 getPosition
() { return mPosition
; }
public final Vector2 getFreeScroll
() { return mFreeScroll
; }
public final float getScrollSpeed
() { return mScrollSpeed
; }
public final StarField.
Status getStarFieldStatus
() { return mStarFieldStatus
; }
public final float getStarFieldStatusSwitchTime
() { return mStarFieldStatusSwitchTime
; }
}