This commit is contained in:
Anuken
2019-03-31 18:24:25 -04:00
89 changed files with 1061 additions and 1669 deletions
@@ -5,17 +5,17 @@ import io.anuke.annotations.Annotations.Remote;
import io.anuke.arc.Events;
import io.anuke.arc.collection.Array;
import io.anuke.arc.collection.ObjectSet;
import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.entities.EntityGroup;
import io.anuke.mindustry.entities.impl.BaseEntity;
import io.anuke.mindustry.entities.traits.HealthTrait;
import io.anuke.arc.math.Mathf;
import io.anuke.arc.math.geom.Point2;
import io.anuke.arc.math.geom.Vector2;
import io.anuke.arc.util.Interval;
import io.anuke.arc.util.Time;
import io.anuke.mindustry.content.Fx;
import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.entities.EntityGroup;
import io.anuke.mindustry.entities.bullet.Bullet;
import io.anuke.mindustry.entities.impl.BaseEntity;
import io.anuke.mindustry.entities.traits.HealthTrait;
import io.anuke.mindustry.entities.traits.TargetTrait;
import io.anuke.mindustry.game.EventType.BlockDestroyEvent;
import io.anuke.mindustry.game.Team;
@@ -24,7 +24,6 @@ import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Edges;
import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.defense.Wall;
import io.anuke.mindustry.world.consumers.Consume;
import io.anuke.mindustry.world.modules.ConsumeModule;
import io.anuke.mindustry.world.modules.ItemModule;
import io.anuke.mindustry.world.modules.LiquidModule;
@@ -44,6 +43,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
public static int sleepingEntities = 0;
public Tile tile;
public Block block;
public Interval timer;
public float health;
public float timeScale = 1f, timeScaleDuration;
@@ -81,10 +81,10 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
this.tile = tile;
x = tile.drawx();
y = tile.drawy();
block = tile.block();
health = tile.block().health;
timer = new Interval(tile.block().timers);
health = block.health;
timer = new Interval(block.timers);
if(shouldAdd){
add();
@@ -139,7 +139,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
}
public void collision(Bullet other){
tile.block().handleBulletHit(this, other);
block.handleBulletHit(this, other);
}
public void kill(){
@@ -151,7 +151,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
float preHealth = health;
Call.onTileDamage(tile, health - tile.block().handleDamage(tile, damage));
Call.onTileDamage(tile, health - block.handleDamage(tile, damage));
if(health <= 0){
Call.onTileDestroyed(tile);
@@ -170,14 +170,10 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
return tile;
}
public boolean consumed(Class<? extends Consume> type){
return tile.block().consumes.get(type).valid(tile.block(), this);
}
public void removeFromProximity(){
tile.block().onProximityRemoved(tile);
block.onProximityRemoved(tile);
Point2[] nearby = Edges.getEdges(tile.block().size);
Point2[] nearby = Edges.getEdges(block.size);
for(Point2 point : nearby){
Tile other = world.tile(tile.x + point.x, tile.y + point.y);
//remove this tile from all nearby tile's proximities
@@ -195,7 +191,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
tmpTiles.clear();
proximity.clear();
Point2[] nearby = Edges.getEdges(tile.block().size);
Point2[] nearby = Edges.getEdges(block.size);
for(Point2 point : nearby){
Tile other = world.tile(tile.x + point.x, tile.y + point.y);
@@ -218,8 +214,8 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
proximity.add(tile);
}
tile.block().onProximityAdded(tile);
tile.block().onProximityUpdate(tile);
block.onProximityAdded(tile);
block.onProximityUpdate(tile);
}
public Array<Tile> proximity(){
@@ -238,7 +234,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
@Override
public float maxHealth(){
return tile.block().health;
return block.health;
}
@Override
@@ -250,7 +246,6 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
public void onDeath(){
if(!dead){
dead = true;
Block block = tile.block();
Events.fire(new BlockDestroyEvent(tile));
block.onDestroyed(tile);
@@ -273,22 +268,22 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
@Override
public void update(){
//TODO better smoke effect, this one is awful
if(health != 0 && health < tile.block().health && !(tile.block() instanceof Wall) &&
Mathf.chance(0.009f * Time.delta() * (1f - health / tile.block().health))){
if(health != 0 && health < block.health && !(block instanceof Wall) &&
Mathf.chance(0.009f * Time.delta() * (1f - health / block.health))){
Effects.effect(Fx.smoke, x + Mathf.range(4), y + Mathf.range(4));
}
timeScaleDuration -= Time.delta();
if(timeScaleDuration <= 0f || !tile.block().canOverdrive){
if(timeScaleDuration <= 0f || !block.canOverdrive){
timeScale = 1f;
}
if(health <= 0){
onDeath();
}
Block previous = tile.block();
tile.block().update(tile);
if(tile.block() == previous && cons != null){
Block previous = block;
block.update(tile);
if(block == previous && cons != null){
cons.update();
}
}