Implemented ground mech boosting

This commit is contained in:
Anuken
2020-05-20 18:48:04 -04:00
parent 78f24b8840
commit 5b445c59c1
62 changed files with 610 additions and 638 deletions

View File

@ -1,16 +0,0 @@
#Maps entity names to IDs. Autogenerated.
draug=0
mindustry.entities.def.BulletComp=1
mindustry.entities.def.DecalComp=2
mindustry.entities.def.EffectComp=3
mindustry.entities.def.FireComp=4
mindustry.entities.def.PlayerComp=5
mindustry.entities.def.PuddleComp=6
mindustry.entities.def.TileComp=7
mindustry.type.Weather.WeatherComp=8
mindustry.world.blocks.storage.LaunchPad.LaunchPayloadComp=9
phantom=10
titan=11
vanguard=12
wraith=13

View File

@ -1 +0,0 @@
{fields:[{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:requests,type:arc.struct.Queue<mindustry.entities.units.BuildRequest>,size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Array<mindustry.entities.units.StatusEntry>,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:vel,type:arc.math.geom.Vec2,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]}

View File

@ -1 +0,0 @@
{fields:[{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Array<mindustry.entities.units.StatusEntry>,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:vel,type:arc.math.geom.Vec2,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]}

View File

@ -1 +0,0 @@
{fields:[{name:baseFlammability,type:float,size:4},{name:block,type:mindustry.world.Block,size:-1},{name:lifetime,type:float,size:4},{name:puddleFlammability,type:float,size:4},{name:tile,type:mindustry.world.Tile,size:-1},{name:time,type:float,size:4},{name:x,type:float,size:4},{name:y,type:float,size:4}]}

View File

@ -1 +0,0 @@
{fields:[{name:height,type:float,size:4},{name:stacks,type:arc.struct.Array<mindustry.type.ItemStack>,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]}

View File

@ -1 +0,0 @@
{version:1,fields:[{name:height,type:float,size:4},{name:lifetime,type:float,size:4},{name:stacks,type:arc.struct.Array<mindustry.type.ItemStack>,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:time,type:float,size:4},{name:x,type:float,size:4},{name:y,type:float,size:4}]}

View File

@ -1 +0,0 @@
{version:2,fields:[{name:lifetime,type:float,size:4},{name:stacks,type:arc.struct.Array<mindustry.type.ItemStack>,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:time,type:float,size:4},{name:x,type:float,size:4},{name:y,type:float,size:4}]}

View File

@ -1 +0,0 @@
{fields:[{name:baseRotation,type:float,size:4},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Array<mindustry.entities.units.StatusEntry>,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:vel,type:arc.math.geom.Vec2,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]}

View File

@ -1 +0,0 @@
{fields:[{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:mineTile,type:mindustry.world.Tile,size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Array<mindustry.entities.units.StatusEntry>,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:vel,type:arc.math.geom.Vec2,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]}

View File

@ -1 +0,0 @@
{fields:[{name:accepting,type:float,size:4},{name:amount,type:float,size:4},{name:generation,type:int,size:4},{name:lastRipple,type:float,size:4},{name:liquid,type:mindustry.type.Liquid,size:-1},{name:tile,type:mindustry.world.Tile,size:-1},{name:updateTime,type:float,size:4},{name:x,type:float,size:4},{name:y,type:float,size:4}]}

View File

@ -1 +0,0 @@
{fields:[{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Array<mindustry.entities.units.StatusEntry>,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:vel,type:arc.math.geom.Vec2,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]}

View File

@ -1 +0,0 @@
{fields:[{name:intensity,type:float,size:4},{name:life,type:float,size:4},{name:opacity,type:float,size:4},{name:weather,type:mindustry.type.Weather,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 729 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 994 B

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 730 KiB

After

Width:  |  Height:  |  Size: 734 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 KiB

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 252 KiB

After

Width:  |  Height:  |  Size: 837 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 837 KiB

View File

@ -128,7 +128,7 @@ public class Vars implements Loadable{
/** whether typing into the console is enabled - developers only */
public static boolean enableConsole = false;
/** whether to clear sector saves when landing */
public static boolean clearSectors = true;
public static boolean clearSectors = false;
/** whether any light rendering is enabled */
public static boolean enableLight = true;
/** application data directory, equivalent to {@link Settings#getDataDirectory()} */

View File

@ -1,16 +1,18 @@
package mindustry.content;
import arc.graphics.*;
import arc.struct.*;
import mindustry.annotations.Annotations.*;
import mindustry.ctype.*;
import mindustry.entities.bullet.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.type.*;
public class UnitTypes implements ContentList{
//ground
public static @EntityDef({Unitc.class, Legsc.class}) UnitType titan, dagger, crawler, fortress, eruptor, chaosArray, eradicator;
public static @EntityDef({Unitc.class, Legsc.class}) UnitType titan, dagger, crawler, fortress, eruptor, chaosArray, eradicator, alpha;
//air
public static @EntityDef({Unitc.class}) UnitType wraith, reaper, ghoul, revenant, lich;
@ -263,6 +265,39 @@ public class UnitTypes implements ContentList{
hitsize = 8f;
}};
alpha = new UnitType("alpha"){{
drillTier = -1;
speed = 0.6f;
hitsize = 9f;
mass = 1.75f;
boostMultiplier = 2f;
itemCapacity = 15;
mass = 0.9f;
health = 160f;
buildSpeed = 0.9f;
canBoost = true;
weapons.add(new Weapon("shockgun"){{
shake = 2f;
shootY = 1f;
x = 1f;
shootX = 3f;
reload = 70f;
alternate = true;
recoil = 4f;
shootSound = Sounds.laser;
bullet = new LaserBulletType(){{
damage = 20f;
recoil = 1f;
sideAngle = 45f;
sideWidth = 1f;
sideLength = 70f;
colors = new Color[]{Pal.heal.cpy().a(0.4f), Pal.heal, Color.white};
}};
}});
}};
/*
chaosArray = new UnitType("chaos-array", GroundUnit::new){{
@ -480,7 +515,7 @@ public class UnitTypes implements ContentList{
}
};
alpha = new UnitType("alpha-mech", false){
"alpha "= new UnitType("alpha-mech", false){
{
drillTier = -1;
speed = 0.5f;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.math.*;
import arc.math.geom.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.*;
import arc.graphics.g2d.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.func.*;
import arc.graphics.g2d.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.util.ArcAnnotate.*;
import mindustry.annotations.Annotations.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.struct.*;
import arc.util.ArcAnnotate.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import mindustry.annotations.Annotations.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.graphics.*;
import arc.graphics.g2d.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import mindustry.annotations.Annotations.*;
import mindustry.gen.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.graphics.*;
import mindustry.annotations.Annotations.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import mindustry.annotations.Annotations.*;
import mindustry.gen.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.func.*;
import arc.util.io.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.math.*;
import arc.math.geom.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.math.*;
import arc.math.geom.*;
@ -14,10 +14,11 @@ import static mindustry.Vars.net;
abstract class FlyingComp implements Posc, Velc, Healthc, Hitboxc{
private static final Vec2 tmp1 = new Vec2(), tmp2 = new Vec2();
@Import float x, y, drag;
@Import float x, y;
@Import Vec2 vel;
float elevation;
private transient boolean wasFlying;
transient float drownTime;
transient float splashTimer;
@ -26,13 +27,17 @@ abstract class FlyingComp implements Posc, Velc, Healthc, Hitboxc{
}
boolean isFlying(){
return elevation >= 0.001f;
return elevation >= 0.09f;
}
boolean canDrown(){
return isGrounded();
}
void landed(){
}
void wobble(){
x += Mathf.sin(Time.time() + id() * 99, 25f, 0.05f) * Time.delta() * elevation;
y += Mathf.cos(Time.time() + id() * 99, 25f, 0.05f) * Time.delta() * elevation;
@ -53,6 +58,16 @@ abstract class FlyingComp implements Posc, Velc, Healthc, Hitboxc{
public void update(){
Floor floor = floorOn();
if(isFlying() != wasFlying){
if(wasFlying){
if(tileOn() != null){
Fx.unitLand.at(x, y, floorOn().isLiquid ? 1f : 0.5f, floorOn().mapColor);
}
}
wasFlying = isFlying();
}
if(isGrounded() && floor.isLiquid){
if((splashTimer += Mathf.dst(deltaX(), deltaY())) >= 7f){
floor.walkEffect.at(x, y, 0, floor.mapColor);

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.math.*;
import arc.util.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.func.*;
import arc.math.geom.QuadTree.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.math.*;
import mindustry.annotations.Annotations.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.math.*;
import arc.util.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.*;
import arc.graphics.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import mindustry.annotations.Annotations.*;
import mindustry.gen.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.util.ArcAnnotate.*;
import mindustry.annotations.Annotations.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import mindustry.annotations.Annotations.*;
import mindustry.async.PhysicsProcess.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.*;
import arc.graphics.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.math.geom.*;
import arc.util.ArcAnnotate.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.graphics.*;
import arc.graphics.g2d.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import mindustry.annotations.Annotations.*;
import mindustry.gen.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.util.*;
import mindustry.annotations.Annotations.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import mindustry.annotations.Annotations.*;
import mindustry.gen.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.graphics.*;
import arc.math.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import mindustry.*;
import mindustry.annotations.Annotations.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.util.ArcAnnotate.*;
import mindustry.annotations.Annotations.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.*;
import arc.Graphics.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.math.*;
import arc.util.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.util.*;
import mindustry.annotations.Annotations.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import mindustry.annotations.Annotations.*;
import mindustry.graphics.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.*;
import arc.math.*;
@ -125,8 +125,19 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
teamIndex.updateCount(team(), -1);
}
@Override
public void landed(){
if(type.landShake > 0f){
Effects.shake(type.landShake, type.landShake, this);
}
type.landed(this);
}
@Override
public void update(){
type.update(this);
drag(type.drag * (isGrounded() ? (floorOn().dragMultiplier) : 1f));
//apply knockback based on spawns

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.math.geom.*;
import arc.util.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import mindustry.annotations.Annotations.*;
import mindustry.content.*;

View File

@ -1,4 +1,4 @@
package mindustry.entities.def;
package mindustry.entities.comp;
import arc.math.*;
import arc.math.geom.*;

View File

@ -45,7 +45,7 @@ public class DesktopInput extends InputHandler{
/** Selected build request for movement. */
private @Nullable BuildRequest sreq;
/** Whether player is currently deleting removal requests. */
private boolean deleting = false;
private boolean deleting = false, shouldShoot = false;
@Override
public void buildUI(Group group){
@ -186,11 +186,14 @@ public class DesktopInput extends InputHandler{
Core.camera.position.lerpDelta(player, 0.08f);
}
shouldShoot = true;
if(!scene.hasMouse()){
if(Core.input.keyDown(Binding.control) && Core.input.keyTap(Binding.select)){
Unitc on = selectedUnit();
if(on != null){
Call.onUnitControl(player, on);
shouldShoot = false;
}
}
@ -454,10 +457,10 @@ public class DesktopInput extends InputHandler{
//only begin shooting if there's no cursor event
if(!tileTapped(selected.entity) && !tryTapPlayer(Core.input.mouseWorld().x, Core.input.mouseWorld().y) && (player.builder().requests().size == 0 || !player.builder().isBuilding()) && !droppingItem &&
!tryBeginMine(selected) && player.miner().mineTile() == null && !Core.scene.hasKeyboard()){
isShooting = true;
isShooting = shouldShoot;
}
}else if(!Core.scene.hasKeyboard()){ //if it's out of bounds, shooting is just fine
isShooting = true;
isShooting = shouldShoot;
}
}else if(Core.input.keyTap(Binding.deselect) && isPlacing()){
block = null;
@ -558,7 +561,7 @@ public class DesktopInput extends InputHandler{
protected void updateMovement(Unitc unit){
boolean omni = !(unit instanceof WaterMovec);
boolean legs = unit.isGrounded();
float speed = unit.type().speed;
float speed = unit.type().speed * Mathf.lerp(1f, unit.type().canBoost ? unit.type().boostMultiplier : 1f, unit.elevation());
float xa = Core.input.axis(Binding.move_x);
float ya = Core.input.axis(Binding.move_y);
@ -590,5 +593,13 @@ public class DesktopInput extends InputHandler{
unit.aim(unit.type().faceTarget ? Core.input.mouseWorld() : Tmp.v1.trns(unit.rotation(), Core.input.mouseWorld().dst(unit)).add(unit.x(), unit.y()));
unit.controlWeapons(true, isShooting);
isBoosting = Core.input.keyDown(Binding.boost);
if(unit.type().canBoost){
Tile tile = unit.tileOn();
unit.elevation(Mathf.approachDelta(unit.elevation(), (tile != null && tile.solid()) || (isBoosting && !movement.isZero()) ? 1f : 0f, 0.08f));
}
}
}

View File

@ -55,7 +55,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
public int rotation;
public boolean droppingItem;
public Group uiGroup;
public boolean isShooting, isBuilding = true, buildWasAutoPaused = false;
public boolean isShooting, isBuilding = true, buildWasAutoPaused = false, isBoosting = false;
public @Nullable UnitType controlledType;
protected @Nullable Schematic lastSchematic;

View File

@ -9,8 +9,8 @@ import arc.math.*;
import arc.math.geom.*;
import arc.scene.ui.layout.*;
import arc.struct.*;
import arc.util.ArcAnnotate.*;
import arc.util.*;
import arc.util.ArcAnnotate.*;
import mindustry.ai.types.*;
import mindustry.annotations.Annotations.*;
import mindustry.ctype.*;
@ -30,11 +30,12 @@ public class UnitType extends UnlockableContent{
public boolean flying;
public @NonNull Prov<? extends Unitc> constructor;
public @NonNull Prov<? extends UnitController> defaultController = () -> !flying ? new GroundAI() : new FlyingAI();
public float speed = 1.1f, boostSpeed = 0.75f, rotateSpeed = 5f, baseRotateSpeed = 5f;
public float drag = 0.3f, mass = 1f, accel = 0.5f;
public float speed = 1.1f, boostMultiplier = 1f, rotateSpeed = 5f, baseRotateSpeed = 5f;
public float drag = 0.3f, mass = 1f, accel = 0.5f, landShake = 0f;
public float health = 200f, range = -1;
public boolean targetAir = true, targetGround = true;
public boolean faceTarget = true, isCounted = true, lowAltitude = false;
public boolean canBoost = false;
public float sway = 1f;
public int itemCapacity = 30;
@ -54,7 +55,7 @@ public class UnitType extends UnlockableContent{
public Sound deathSound = Sounds.bang;
public Array<Weapon> weapons = new Array<>();
public TextureRegion baseRegion, legRegion, region, cellRegion, occlusionRegion;
public TextureRegion baseRegion, legRegion, region, shadowRegion, cellRegion, occlusionRegion;
public UnitType(String name){
super(name);
@ -83,6 +84,10 @@ public class UnitType extends UnlockableContent{
return weapons.size > 0;
}
public void update(Unitc unit){}
public void landed(Unitc unit){}
@Override
public void displayInfo(Table table){
ContentDisplay.displayUnit(table, this);
@ -108,6 +113,7 @@ public class UnitType extends UnlockableContent{
baseRegion = Core.atlas.find(name + "-base");
cellRegion = Core.atlas.find(name + "-cell", Core.atlas.find("power-cell"));
occlusionRegion = Core.atlas.find("circle-shadow");
shadowRegion = icon(Cicon.full);
}
@Override
@ -119,25 +125,24 @@ public class UnitType extends UnlockableContent{
public void draw(Unitc unit){
Legsc legs = unit instanceof Legsc ? (Legsc)unit : null;
float z = unit.elevation() > 0.5f ? (lowAltitude ? Layer.flyingUnitLow : Layer.flyingUnit) : Layer.groundUnit;
if(unit.controller().isBeingControlled(player.unit())){
drawControl(unit);
}
if(unit.isFlying()){
Draw.z(Layer.darkness);
Draw.z(Math.min(Layer.darkness, z - 1f));
drawShadow(unit);
}
float z = unit.elevation() > 0.5f ? (lowAltitude ? Layer.flyingUnitLow : Layer.flyingUnit) : Layer.groundUnit;
Draw.z(z - 0.02f);
if(legs != null){
drawLegs(legs);
float ft = Mathf.sin(legs.walkTime(), 3f, 3f);
legOffset.trns(legs.baseRotation(), 0f, ft * 0.18f * sway);
legOffset.trns(legs.baseRotation(), 0f, Mathf.lerp(ft * 0.18f * sway, 0f, unit.elevation()));
unit.trns(legOffset.x, legOffset.y);
}
@ -178,7 +183,7 @@ public class UnitType extends UnlockableContent{
public void drawShadow(Unitc unit){
Draw.color(shadowColor);
Draw.rect(region, unit.x() + shadowTX * unit.elevation(), unit.y() + shadowTY * unit.elevation(), unit.rotation() - 90);
Draw.rect(shadowRegion, unit.x() + shadowTX * unit.elevation(), unit.y() + shadowTY * unit.elevation(), unit.rotation() - 90);
Draw.color();
}
@ -226,26 +231,29 @@ public class UnitType extends UnlockableContent{
public void drawEngine(Unitc unit){
if(!unit.isFlying()) return;
float scale = unit.elevation();
float offset = engineOffset/2f + engineOffset/2f*scale;
if(unit instanceof Trailc){
Trail trail = ((Trailc)unit).trail();
float cx = unit.x() + Angles.trnsx(unit.rotation() + 180, engineOffset),
cy = unit.y() + Angles.trnsy(unit.rotation() + 180, engineOffset);
float cx = unit.x() + Angles.trnsx(unit.rotation() + 180, offset),
cy = unit.y() + Angles.trnsy(unit.rotation() + 180, offset);
trail.update(cx, cy);
trail.draw(unit.team().color, (engineSize + Mathf.absin(Time.time(), 2f, engineSize / 4f) * unit.elevation()));
trail.draw(unit.team().color, (engineSize + Mathf.absin(Time.time(), 2f, engineSize / 4f) * scale));
}
Draw.color(unit.team().color);
Fill.circle(
unit.x() + Angles.trnsx(unit.rotation() + 180, engineOffset),
unit.y() + Angles.trnsy(unit.rotation() + 180, engineOffset),
(engineSize + Mathf.absin(Time.time(), 2f, engineSize / 4f) * unit.elevation())
unit.x() + Angles.trnsx(unit.rotation() + 180, offset),
unit.y() + Angles.trnsy(unit.rotation() + 180, offset),
(engineSize + Mathf.absin(Time.time(), 2f, engineSize / 4f)) * scale
);
Draw.color(Color.white);
Fill.circle(
unit.x() + Angles.trnsx(unit.rotation() + 180, engineOffset - 1f),
unit.y() + Angles.trnsy(unit.rotation() + 180, engineOffset - 1f),
(engineSize + Mathf.absin(Time.time(), 2f, engineSize / 4f)) / 2f * unit.elevation()
unit.x() + Angles.trnsx(unit.rotation() + 180, offset - 1f),
unit.y() + Angles.trnsy(unit.rotation() + 180, offset - 1f),
(engineSize + Mathf.absin(Time.time(), 2f, engineSize / 4f)) / 2f * scale
);
Draw.color();
}
@ -305,8 +313,10 @@ public class UnitType extends UnlockableContent{
Draw.mixcol(Color.white, unit.hitTime());
float sin = Mathf.sin(unit.walkTime(), 3f, 1f);
float e = unit.elevation();
float sin = Mathf.lerp(Mathf.sin(unit.walkTime(), 3f, 1f), 0f, e);
float ft = sin*(2.5f + (unit.hitSize()-8f)/2f);
float boostTrns = e * 2f;
Floor floor = unit.floorOn();
@ -317,11 +327,11 @@ public class UnitType extends UnlockableContent{
for(int i : Mathf.signs){
//Draw.mixcol(Color.valueOf("989aa4"), Math.max(sin * i, 0));
Draw.rect(legRegion,
unit.x() + Angles.trnsx(unit.baseRotation(), ft * i),
unit.y() + Angles.trnsy(unit.baseRotation(), ft * i),
unit.x() + Angles.trnsx(unit.baseRotation(), ft * i - boostTrns, -boostTrns*i),
unit.y() + Angles.trnsy(unit.baseRotation(), ft * i - boostTrns, -boostTrns*i),
legRegion.getWidth() * i * Draw.scl,
legRegion.getHeight() * Draw.scl - Math.max(-sin * i, 0) * legRegion.getHeight() * 0.5f * Draw.scl,
unit.baseRotation() - 90);
unit.baseRotation() - 90 + 35f*i*e);
}
//Draw.mixcol();