DeerEngine/roe/scripts/BallScript.as

80 lines
2.1 KiB
ActionScript
Executable File

class BallScript : ComponentScript {
float height = 2;
float ballHeight = 0.25f;
float checkDistance = 8.8f;
float checkRad = 0.1f;
float downHeight = .25;
float upHeight = 9.75;
Entity player;
Entity enemy;
Vec3 direction;
void start() {
player = getEntity(6);
enemy = getEntity(5);
direction = Vec3(-1,1,0);
direction.normalize();
}
void update() {
Vec3 currentPos = entity.getPosition();
if (currentPos.y <= downHeight){
direction.y = abs(direction.y);
}
if (currentPos.y >= upHeight){
direction.y = -abs(direction.y);
}
if (direction.x < 0 && currentPos.x >= -checkDistance - checkRad / 2.0f && currentPos.x <= -checkDistance + checkRad / 2.0f) {
if (hasCollision(player)) {
recalculateDirection(player);
}
}
if (direction.x > 0 && currentPos.x >= checkDistance - checkRad / 2.0f && currentPos.x <= checkDistance + checkRad / 2.0f) {
if (hasCollision(enemy)) {
recalculateDirection(enemy);
}
}
Vec3 nextPos = currentPos + direction * 0.14f;
entity.setPosition(nextPos);
if (abs(nextPos.x) > 10)
entity.setPosition(Vec3(0, 5, 0));
}
void recalculateDirection(Entity col) {
Vec3 ballEntDir = entity.getPosition() - col.getPosition();
direction = ballEntDir.normalize();
if (direction.x > 0)
direction.x = 1;
else
direction.x = -1;
}
bool hasCollision(Entity colEntity) {
Vec3 position = entity.getPosition();
float maxBallPos = position.y + ballHeight / 2.0f;
float minBallPos = position.y - ballHeight / 2.0f;
Vec3 entPosition = colEntity.getPosition();
float entMaxPos = entPosition.y + height / 2.0f;
float entMinPos = entPosition.y - height / 2.0f;
return (maxBallPos <= entMaxPos && maxBallPos >= entMinPos);// ||
//(minBallPos <= entMaxPos && minBallPos >= entMinPos);
}
}