fix particle effect initial position

- move the offset calculation inside MapActor
This commit is contained in:
Anthony Calosa
2023-03-10 09:18:43 +08:00
parent 51942b276c
commit 5748d09b54
3 changed files with 19 additions and 9 deletions

View File

@@ -63,6 +63,7 @@ public class MapActor extends Actor {
{
ParticleEffect effect = new ParticleEffect();
effect.load(Config.instance().getFile(path),Config.instance().getFile(path).parent());
effect.setPosition(getCenterX(), getCenterY());
effects.add(new CurrentEffect(path, effect, offset, overlay));
if(duration!=0)//ParticleEffect.setDuration uses an integer for some reason
{
@@ -147,16 +148,29 @@ public class MapActor extends Actor {
effect.effect.draw(batch);
}
}
float getCenterX() {
float scale = 1f;
if (this instanceof EnemySprite) {
scale = ((EnemySprite) this).getData().scale;
}
return getX()+(getWidth()*scale)/2;
}
float getCenterY() {
float scale = 1f;
if (this instanceof EnemySprite) {
scale = ((EnemySprite) this).getData().scale;
}
return getY()+(getHeight()*scale)/2;
}
@Override
public void act(float delta) {
super.act(delta);
for(int i=0;i<effects.size;i++)
{
CurrentEffect effect=effects.get(i);
effect.effect.update(delta);
effect.effect.setPosition(getX()+getHeight()/2+effect.offset.x,getY()+getWidth()/2+effect.offset.y);
effect.effect.setPosition(getCenterX()+effect.offset.x,getCenterY()+effect.offset.y);
if(effect.effect.isComplete())
{
effects.removeIndex(i);

View File

@@ -798,9 +798,7 @@ public class MapStage extends GameStage {
Current.player().win();
player.setAnimation(CharacterSprite.AnimationTypes.Attack);
float vx = currentMob.getData().scale == 1f ? 0f : -((currentMob.getWidth()*currentMob.getData().scale)/2);
float vy = currentMob.getData().scale == 1f ? 0f : -((currentMob.getHeight()*currentMob.getData().scale)/2);
currentMob.playEffect(Paths.EFFECT_BLOOD, 0.5f, true, new Vector2(vx, vy));
currentMob.playEffect(Paths.EFFECT_BLOOD, 0.5f);
Timer.schedule(new Timer.Task() {
@Override
public void run() {

View File

@@ -156,9 +156,7 @@ public class WorldStage extends GameStage implements SaveFileContent {
if (playerIsWinner) {
Current.player().win();
player.setAnimation(CharacterSprite.AnimationTypes.Attack);
float vx = currentMob.getData().scale == 1f ? 0f : -((currentMob.getWidth()*currentMob.getData().scale)/2);
float vy = currentMob.getData().scale == 1f ? 0f : -((currentMob.getHeight()*currentMob.getData().scale)/2);
currentMob.playEffect(Paths.EFFECT_BLOOD, 0.5f, true, new Vector2(vx, vy));
currentMob.playEffect(Paths.EFFECT_BLOOD, 0.5f);
Timer.schedule(new Timer.Task() {
@Override
public void run() {