Naval unit tweaks
This commit is contained in:
@@ -11,7 +11,7 @@ public class StatusFieldAbility implements Ability{
|
||||
public @NonNull StatusEffect effect;
|
||||
public float duration = 60, reload = 100, range = 20;
|
||||
public Effect applyEffect = Fx.heal;
|
||||
public Effect activeEffect = Fx.healWave;
|
||||
public Effect activeEffect = Fx.overdriveWave;
|
||||
|
||||
StatusFieldAbility(){}
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ public class ArtilleryBulletType extends BasicBulletType{
|
||||
scaleVelocity = true;
|
||||
hitShake = 1f;
|
||||
hitSound = Sounds.explosion;
|
||||
shootEffect = Fx.shootBig;
|
||||
trailEffect = Fx.artilleryTrail;
|
||||
}
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ abstract class FlyingComp implements Posc, Velc, Healthc, Hitboxc{
|
||||
|
||||
if(!hovering && isGrounded() && floor.isLiquid){
|
||||
if((splashTimer += Mathf.dst(deltaX(), deltaY())) >= 7f){
|
||||
floor.walkEffect.at(x, y, 1f, floor.mapColor);
|
||||
floor.walkEffect.at(x, y, hitSize() / 8f, floor.mapColor);
|
||||
splashTimer = 0f;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,8 +73,8 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{
|
||||
if(rect.overlaps(rect2)){
|
||||
unit.apply(liquid.effect, 60 * 2);
|
||||
|
||||
if(unit.vel().len() > 0.1){
|
||||
Fx.ripple.at(unit.x(), unit.y(), unit.type().rippleScale, liquid.color);
|
||||
if(unit.vel.len() > 0.1){
|
||||
Fx.ripple.at(unit.x, unit.y, unit.type().rippleScale, liquid.color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ abstract class StatusComp implements Posc, Flyingc{
|
||||
private Seq<StatusEntry> statuses = new Seq<>();
|
||||
private transient Bits applied = new Bits(content.getBy(ContentType.status).size);
|
||||
|
||||
@ReadOnly transient float speedMultiplier, damageMultiplier, armorMultiplier;
|
||||
@ReadOnly transient float speedMultiplier = 1, damageMultiplier = 1, armorMultiplier = 1, reloadMultiplier = 1;
|
||||
|
||||
/** @return damage taken based on status armor multipliers */
|
||||
float getShieldDamage(float amount){
|
||||
@@ -108,7 +108,7 @@ abstract class StatusComp implements Posc, Flyingc{
|
||||
}
|
||||
|
||||
applied.clear();
|
||||
speedMultiplier = damageMultiplier = armorMultiplier = 1f;
|
||||
speedMultiplier = damageMultiplier = armorMultiplier = reloadMultiplier = 1f;
|
||||
|
||||
if(statuses.isEmpty()) return;
|
||||
|
||||
@@ -128,6 +128,7 @@ abstract class StatusComp implements Posc, Flyingc{
|
||||
speedMultiplier *= entry.effect.speedMultiplier;
|
||||
armorMultiplier *= entry.effect.armorMultiplier;
|
||||
damageMultiplier *= entry.effect.damageMultiplier;
|
||||
reloadMultiplier *= entry.effect.reloadMultiplier;
|
||||
entry.effect.update(base(), entry.time);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,17 +1,54 @@
|
||||
package mindustry.entities.comp;
|
||||
|
||||
import arc.graphics.*;
|
||||
import arc.graphics.g2d.*;
|
||||
import arc.math.*;
|
||||
import arc.util.*;
|
||||
import mindustry.annotations.Annotations.*;
|
||||
import mindustry.content.*;
|
||||
import mindustry.entities.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.graphics.*;
|
||||
import mindustry.type.*;
|
||||
import mindustry.world.blocks.environment.*;
|
||||
|
||||
import static mindustry.Vars.collisions;
|
||||
import static mindustry.Vars.*;
|
||||
|
||||
//just a proof of concept
|
||||
@Component
|
||||
abstract class WaterMoveComp implements Posc, Velc, Hitboxc, Flyingc{
|
||||
@Import float x, y;
|
||||
abstract class WaterMoveComp implements Posc, Velc, Hitboxc, Flyingc, Unitc{
|
||||
@Import float x, y, rotation;
|
||||
@Import UnitType type;
|
||||
|
||||
private transient Trail tleft = new Trail(1), tright = new Trail(1);
|
||||
private transient Color trailColor = Blocks.water.mapColor.cpy().mul(1.5f);
|
||||
|
||||
@Override
|
||||
public void update(){
|
||||
for(int i = 0; i < 2; i++){
|
||||
Trail t = i == 0 ? tleft : tright;
|
||||
t.length = type.trailLength;
|
||||
|
||||
int sign = i == 0 ? -1 : 1;
|
||||
float cx = Angles.trnsx(rotation - 90, type.trailX * sign, type.trailY) + x, cy = Angles.trnsy(rotation - 90, type.trailX * sign, type.trailY) + y;
|
||||
t.update(cx, cy);
|
||||
}
|
||||
}
|
||||
|
||||
public void draw(){
|
||||
float z = Draw.z();
|
||||
|
||||
Draw.z(Layer.debris);
|
||||
|
||||
Floor floor = floorOn();
|
||||
Color color = Tmp.c1.set(floor.mapColor).mul(1.7f);
|
||||
trailColor.lerp(color, Mathf.clamp(Time.delta() * 0.04f));
|
||||
|
||||
tleft.draw(trailColor, type.trailScl);
|
||||
tright.draw(trailColor, type.trailScl);
|
||||
|
||||
Draw.z(z);
|
||||
}
|
||||
|
||||
@Replace
|
||||
@Override
|
||||
|
||||
@@ -14,7 +14,7 @@ import static mindustry.Vars.*;
|
||||
|
||||
@Component
|
||||
abstract class WeaponsComp implements Teamc, Posc, Rotc{
|
||||
@Import float x, y, rotation;
|
||||
@Import float x, y, rotation, reloadMultiplier;
|
||||
|
||||
/** minimum cursor distance from unit, fixes 'cross-eyed' shooting */
|
||||
static final float minAimDst = 18f;
|
||||
@@ -82,7 +82,7 @@ abstract class WeaponsComp implements Teamc, Posc, Rotc{
|
||||
public void update(){
|
||||
for(WeaponMount mount : mounts){
|
||||
Weapon weapon = mount.weapon;
|
||||
mount.reload = Math.max(mount.reload - Time.delta(), 0);
|
||||
mount.reload = Math.max(mount.reload - Time.delta() * reloadMultiplier, 0);
|
||||
|
||||
//flip weapon shoot side for alternating weapons at half reload
|
||||
if(weapon.otherSide != -1 && weapon.alternate && mount.side == weapon.flipSprite &&
|
||||
|
||||
Reference in New Issue
Block a user