Allow flipped shot patterns

This commit is contained in:
Anuke
2022-03-05 23:06:19 -05:00
parent 7bf25cc46e
commit cc3116f329
5 changed files with 43 additions and 4 deletions

View File

@@ -6,6 +6,14 @@ public class ShootBarrel extends ShootPattern{
/** offset of barrel to start on */
public int barrelOffset = 0;
@Override
public void flip(){
barrels = barrels.clone();
for(int i = 0; i < barrels.length; i += 3){
barrels[i] *= -1;
}
}
@Override
public void shoot(int totalShots, BulletHandler handler){
for(int i = 0; i < shots; i++){

View File

@@ -12,6 +12,18 @@ public class ShootMulti extends ShootPattern{
public ShootMulti(){
}
//deep copy needed for flips
@Override
public void flip(){
source = source.copy();
source.flip();
dest = dest.clone();
for(int i = 0; i < dest.length; i++){
dest[i] = dest[i].copy();
dest[i].flip();
}
}
@Override
public void shoot(int totalShots, BulletHandler handler){
source.shoot(totalShots, (x, y, rotation, delay, move) -> {

View File

@@ -3,7 +3,7 @@ package mindustry.entities.pattern;
import mindustry.entities.*;
/** Handles different types of bullet patterns for shooting. */
public class ShootPattern{
public class ShootPattern implements Cloneable{
/** amount of shots per "trigger pull" */
public int shots = 1;
/** delay in ticks before first shot */
@@ -18,6 +18,19 @@ public class ShootPattern{
}
}
/** Subclasses should override this to flip its sides. */
public void flip(){
}
public ShootPattern copy(){
try{
return (ShootPattern)clone();
}catch(CloneNotSupportedException absurd){
throw new RuntimeException("impending doom", absurd);
}
}
public interface BulletHandler{
/**
* @param x x offset of bullet, should be transformed by weapon rotation