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(); ParticleEffect effect = new ParticleEffect();
effect.load(Config.instance().getFile(path),Config.instance().getFile(path).parent()); effect.load(Config.instance().getFile(path),Config.instance().getFile(path).parent());
effect.setPosition(getCenterX(), getCenterY());
effects.add(new CurrentEffect(path, effect, offset, overlay)); effects.add(new CurrentEffect(path, effect, offset, overlay));
if(duration!=0)//ParticleEffect.setDuration uses an integer for some reason if(duration!=0)//ParticleEffect.setDuration uses an integer for some reason
{ {
@@ -147,16 +148,29 @@ public class MapActor extends Actor {
effect.effect.draw(batch); 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 @Override
public void act(float delta) { public void act(float delta) {
super.act(delta); super.act(delta);
for(int i=0;i<effects.size;i++) for(int i=0;i<effects.size;i++)
{ {
CurrentEffect effect=effects.get(i); CurrentEffect effect=effects.get(i);
effect.effect.update(delta); 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()) if(effect.effect.isComplete())
{ {
effects.removeIndex(i); effects.removeIndex(i);

View File

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

View File

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