package com.gebauz.burutaru.game.entities.enemies;
import com.badlogic.gdx.audio.Sound;
import com.gebauz.bauzoid.game.StateMachine;
import com.gebauz.bauzoid.graphics.sprite.Sprite;
import com.gebauz.bauzoid.graphics.sprite.SpriteInstance;
import com.gebauz.bauzoid.math.MathUtil;
import com.gebauz.bauzoid.math.Vector2;
import com.gebauz.bauzoid.math.collision.Shape;
import com.gebauz.bauzoid.parser.ParseUtil;
import com.gebauz.bauzoid.parser.ScanException;
import com.gebauz.bauzoid.parser.Tokenizer;
import com.gebauz.burutaru.GameConsts;
import com.gebauz.burutaru.game.GameLogic;
import com.gebauz.burutaru.game.entities.CollisionWorld;
import com.gebauz.burutaru.game.entities.CollisionWorld.CollisionInfo;
import com.gebauz.burutaru.game.entities.effects.Explosions;
import com.gebauz.burutaru.game.entities.enemies.BlobEnemy.BlobInstance;
public class DebrisEnemy
extends SpriteShapeEnemy
{
// Constants========================================================================================
public static final int DEFAULT_HEALTH =
10;
public static final int DEFAULT_WIDTH =
100;
public static final int DEFAULT_HEIGHT =
100;
// Embedded Types===================================================================================
public class DebrisInstance
extends EnemyInstance
{
// Fields=======================================================================================
public Vector2 mSize =
new Vector2
(DEFAULT_WIDTH, DEFAULT_HEIGHT
);
// Methods======================================================================================
public DebrisInstance
(String instanceName
)
{
super(DebrisEnemy.
this, instanceName, DEFAULT_HEALTH
);
}
@
Override
public void init
()
{
init
(getSprite
(), getDefaultShape
());
}
public void init
(Sprite parentSprite,
Shape parentShape
)
{
mSpriteInstance = parentSprite.
createSpriteInstanceForAll();
mSpriteInstance.
transform.
x = spawnTrigger.
x;
mSpriteInstance.
transform.
y = spawnTrigger.
y;
mSpriteInstance.
transform.
w = mSize.
x;
mSpriteInstance.
transform.
h = mSize.
y;
mSpriteInstance.
centerPivot();
mShapeInstance =
new Shape(parentShape
);
mShapeInstance.
init();
getGameLogic
().
getCollisionWorld().
addEnemyCollider(this, mShapeInstance
);
}
@
Override
public void spawn
()
{
hasSpawned =
true;
if (spawnPosition
!=
null)
{
mSpriteInstance.
transform.
x = spawnTrigger.
x + spawnPosition.
x - getGameLogic
().
getLevel().
getCurrentPosition().
x;
mSpriteInstance.
transform.
y = spawnTrigger.
y + spawnPosition.
y - getGameLogic
().
getLevel().
getCurrentPosition().
y;
mSpriteInstance.
transform.
angle =
0;
}
getGame
().
log("Spawned DebrisEnemy: " + name +
" (" + mSpriteInstance.
transform.
x +
", " + mSpriteInstance.
transform.
y +
")");
/*mMovement.set(mMoveDir.x, mMoveDir.y);
mMovement.setLength(mMoveSpeed);*/
}
@
Override
public void exit
()
{
}
@
Override
public void update
(float deltaTime
)
{
if (mSpriteInstance
!=
null)
{
mVelocity.
set(mMovement.
x*deltaTime, mMovement.
y*deltaTime
);
mShapeInstance.
transform.
set(mSpriteInstance.
transform);
if (getGameLogic
().
getCollisionWorld().
checkCollisionSat(CollisionWorld.
FILTER_LEVEL_ELEMENTS, mShapeInstance, mVelocity, mCollisionResult
))
{
die
();
mVelocity.
x += mCollisionResult.
penetrationVector.
x;
mVelocity.
y += mCollisionResult.
penetrationVector.
y;
}
mSpriteInstance.
transform.
x += mVelocity.
x;
mSpriteInstance.
transform.
y += mVelocity.
y;
}
if (getGameLogic
().
isOutOfScreen(mSpriteInstance.
transform, UNSPAWN_DISTANCE
))
unspawn
();
super.
update(deltaTime
);
}
@
Override
public void render
()
{
super.
render();
}
@
Override
public void die
()
{
getGameLogic
().
getExplosions().
spawn(mSpriteInstance.
transform.
x, mSpriteInstance.
transform.
y, DEFAULT_WIDTH
);
unspawn
();
}
@
Override
public void addImpulse
(float x,
float y
)
{
mSpriteInstance.
transform.
x += x
;
mSpriteInstance.
transform.
y += y
;
}
/*@Override
public Shape getShape()
{
mShapeInstance.transform.set(mSpriteInstance.transform);
return mShapeInstance;
}*/
@
Override
public boolean readParameter
(Tokenizer t,
String id
) throws ScanException
{
if (id.
equalsIgnoreCase("size"))
{
mSize = ParseUtil.
readVector2(t
);
}
else
{
return super.
readParameter(t, id
);
}
t.
readToken(";");
return true;
}
}
// Fields===========================================================================================
private CollisionInfo mCollisionResult =
new CollisionInfo
();
// Methods==========================================================================================
public DebrisEnemy
(GameLogic gameLogic
)
{
super(gameLogic,
"data/textures/enemies/elements/debris02.png",
"data/textures/enemies/elements/debris02.shape");
// TODO: load several types of debris
}
@
Override
public void initAsync
()
{
super.
initAsync();
}
@
Override
public void init
()
{
super.
init();
}
@
Override
public void exit
()
{
super.
exit();
}
@
Override
public EnemyInstance newInstance
(String name
)
{
DebrisInstance instance =
new DebrisInstance
(name
);
mEnemies.
add(instance
);
return instance
;
}
public EnemyInstance newInstance
(String name,
String spriteFile,
String shapeFile
)
{
DebrisInstance instance =
new DebrisInstance
(name
);
mEnemies.
add(instance
);
return instance
;
}
// Getters/Setters==================================================================================
}