80 lines
2.1 KiB
ActionScript
Executable File
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);
|
|
}
|
|
|
|
} |