Added item drops, fixed various bugs
This commit is contained in:
@@ -9,6 +9,7 @@ import io.anuke.mindustry.entities.Player;
|
|||||||
import io.anuke.mindustry.entities.TileEntity;
|
import io.anuke.mindustry.entities.TileEntity;
|
||||||
import io.anuke.mindustry.entities.bullet.Bullet;
|
import io.anuke.mindustry.entities.bullet.Bullet;
|
||||||
import io.anuke.mindustry.entities.effect.Fire;
|
import io.anuke.mindustry.entities.effect.Fire;
|
||||||
|
import io.anuke.mindustry.entities.effect.ItemDrop;
|
||||||
import io.anuke.mindustry.entities.effect.Puddle;
|
import io.anuke.mindustry.entities.effect.Puddle;
|
||||||
import io.anuke.mindustry.entities.effect.Shield;
|
import io.anuke.mindustry.entities.effect.Shield;
|
||||||
import io.anuke.mindustry.entities.units.BaseUnit;
|
import io.anuke.mindustry.entities.units.BaseUnit;
|
||||||
@@ -16,7 +17,7 @@ import io.anuke.mindustry.game.Team;
|
|||||||
import io.anuke.mindustry.io.Version;
|
import io.anuke.mindustry.io.Version;
|
||||||
import io.anuke.ucore.entities.Entities;
|
import io.anuke.ucore.entities.Entities;
|
||||||
import io.anuke.ucore.entities.EntityGroup;
|
import io.anuke.ucore.entities.EntityGroup;
|
||||||
import io.anuke.ucore.entities.component.DrawTrait;
|
import io.anuke.ucore.entities.trait.DrawTrait;
|
||||||
import io.anuke.ucore.entities.impl.EffectEntity;
|
import io.anuke.ucore.entities.impl.EffectEntity;
|
||||||
import io.anuke.ucore.scene.ui.layout.Unit;
|
import io.anuke.ucore.scene.ui.layout.Unit;
|
||||||
import io.anuke.ucore.util.OS;
|
import io.anuke.ucore.util.OS;
|
||||||
@@ -63,7 +64,7 @@ public class Vars{
|
|||||||
//whether turrets have infinite ammo (only with debug)
|
//whether turrets have infinite ammo (only with debug)
|
||||||
public static boolean infiniteAmmo = true;
|
public static boolean infiniteAmmo = true;
|
||||||
//whether to show paths of enemies
|
//whether to show paths of enemies
|
||||||
public static boolean showPaths = true;
|
public static boolean showPaths = false;
|
||||||
//if false, player is always hidden
|
//if false, player is always hidden
|
||||||
public static boolean showPlayer = true;
|
public static boolean showPlayer = true;
|
||||||
//whether to hide ui, only on debug
|
//whether to hide ui, only on debug
|
||||||
@@ -81,6 +82,8 @@ public class Vars{
|
|||||||
|
|
||||||
public static final int saveSlots = 64;
|
public static final int saveSlots = 64;
|
||||||
|
|
||||||
|
public static final float itemSize = 5f;
|
||||||
|
|
||||||
//only if smoothCamera
|
//only if smoothCamera
|
||||||
public static boolean snapCamera = true;
|
public static boolean snapCamera = true;
|
||||||
|
|
||||||
@@ -132,8 +135,10 @@ public class Vars{
|
|||||||
public static EntityGroup<Shield> shieldGroup;
|
public static EntityGroup<Shield> shieldGroup;
|
||||||
public static EntityGroup<EffectEntity> effectGroup;
|
public static EntityGroup<EffectEntity> effectGroup;
|
||||||
public static EntityGroup<DrawTrait> groundEffectGroup;
|
public static EntityGroup<DrawTrait> groundEffectGroup;
|
||||||
|
public static EntityGroup<ItemDrop> itemGroup;
|
||||||
|
|
||||||
public static EntityGroup<Puddle> puddleGroup;
|
public static EntityGroup<Puddle> puddleGroup;
|
||||||
public static EntityGroup<Fire> airItemGroup;
|
public static EntityGroup<Fire> fireGroup;
|
||||||
public static EntityGroup<BaseUnit>[] unitGroups;
|
public static EntityGroup<BaseUnit>[] unitGroups;
|
||||||
|
|
||||||
public static void init(){
|
public static void init(){
|
||||||
@@ -146,7 +151,8 @@ public class Vars{
|
|||||||
effectGroup = Entities.addGroup(EffectEntity.class, false);
|
effectGroup = Entities.addGroup(EffectEntity.class, false);
|
||||||
groundEffectGroup = Entities.addGroup(DrawTrait.class, false);
|
groundEffectGroup = Entities.addGroup(DrawTrait.class, false);
|
||||||
puddleGroup = Entities.addGroup(Puddle.class, false);
|
puddleGroup = Entities.addGroup(Puddle.class, false);
|
||||||
airItemGroup = Entities.addGroup(Fire.class, false);
|
itemGroup = Entities.addGroup(ItemDrop.class);
|
||||||
|
fireGroup = Entities.addGroup(Fire.class, false);
|
||||||
unitGroups = new EntityGroup[Team.values().length];
|
unitGroups = new EntityGroup[Team.values().length];
|
||||||
|
|
||||||
threads = new ThreadHandler(Platform.instance.getThreadProvider());
|
threads = new ThreadHandler(Platform.instance.getThreadProvider());
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package io.anuke.mindustry.content;
|
|||||||
|
|
||||||
import io.anuke.mindustry.content.fx.EnvironmentFx;
|
import io.anuke.mindustry.content.fx.EnvironmentFx;
|
||||||
import io.anuke.mindustry.entities.StatusController.TransitionResult;
|
import io.anuke.mindustry.entities.StatusController.TransitionResult;
|
||||||
import io.anuke.mindustry.entities.StatusEffect;
|
import io.anuke.mindustry.type.StatusEffect;
|
||||||
import io.anuke.mindustry.entities.Unit;
|
import io.anuke.mindustry.entities.Unit;
|
||||||
import io.anuke.mindustry.type.ContentList;
|
import io.anuke.mindustry.type.ContentList;
|
||||||
import io.anuke.ucore.core.Effects;
|
import io.anuke.ucore.core.Effects;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import io.anuke.mindustry.content.*;
|
|||||||
import io.anuke.mindustry.content.blocks.*;
|
import io.anuke.mindustry.content.blocks.*;
|
||||||
import io.anuke.mindustry.content.bullets.*;
|
import io.anuke.mindustry.content.bullets.*;
|
||||||
import io.anuke.mindustry.content.fx.*;
|
import io.anuke.mindustry.content.fx.*;
|
||||||
import io.anuke.mindustry.entities.StatusEffect;
|
import io.anuke.mindustry.type.StatusEffect;
|
||||||
import io.anuke.mindustry.entities.bullet.BulletType;
|
import io.anuke.mindustry.entities.bullet.BulletType;
|
||||||
import io.anuke.mindustry.entities.units.UnitType;
|
import io.anuke.mindustry.entities.units.UnitType;
|
||||||
import io.anuke.mindustry.type.ContentList;
|
import io.anuke.mindustry.type.ContentList;
|
||||||
|
|||||||
@@ -149,9 +149,10 @@ public class Logic extends Module {
|
|||||||
}
|
}
|
||||||
Entities.update(puddleGroup);
|
Entities.update(puddleGroup);
|
||||||
Entities.update(tileGroup);
|
Entities.update(tileGroup);
|
||||||
Entities.update(airItemGroup);
|
Entities.update(fireGroup);
|
||||||
Entities.update(shieldGroup);
|
Entities.update(shieldGroup);
|
||||||
Entities.update(playerGroup);
|
Entities.update(playerGroup);
|
||||||
|
Entities.update(itemGroup);
|
||||||
|
|
||||||
for(EntityGroup group : unitGroups){
|
for(EntityGroup group : unitGroups){
|
||||||
if(!group.isEmpty()){
|
if(!group.isEmpty()){
|
||||||
@@ -166,6 +167,7 @@ public class Logic extends Module {
|
|||||||
}
|
}
|
||||||
|
|
||||||
EntityPhysics.collideGroups(bulletGroup, playerGroup);
|
EntityPhysics.collideGroups(bulletGroup, playerGroup);
|
||||||
|
EntityPhysics.collideGroups(itemGroup, playerGroup);
|
||||||
|
|
||||||
world.pathfinder().update();
|
world.pathfinder().update();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import com.badlogic.gdx.utils.Base64Coder;
|
|||||||
import io.anuke.mindustry.core.ThreadHandler.ThreadProvider;
|
import io.anuke.mindustry.core.ThreadHandler.ThreadProvider;
|
||||||
import io.anuke.ucore.core.Settings;
|
import io.anuke.ucore.core.Settings;
|
||||||
import io.anuke.ucore.entities.EntityGroup;
|
import io.anuke.ucore.entities.EntityGroup;
|
||||||
import io.anuke.ucore.entities.component.Entity;
|
import io.anuke.ucore.entities.trait.Entity;
|
||||||
import io.anuke.ucore.function.Consumer;
|
import io.anuke.ucore.function.Consumer;
|
||||||
import io.anuke.ucore.scene.ui.TextField;
|
import io.anuke.ucore.scene.ui.TextField;
|
||||||
|
|
||||||
|
|||||||
@@ -78,7 +78,6 @@ public class Renderer extends RendererModule{
|
|||||||
entity.effect = effect;
|
entity.effect = effect;
|
||||||
entity.color = color;
|
entity.color = color;
|
||||||
entity.rotation = rotation;
|
entity.rotation = rotation;
|
||||||
entity.lifetime = effect.lifetime;
|
|
||||||
entity.data = data;
|
entity.data = data;
|
||||||
entity.id ++;
|
entity.id ++;
|
||||||
entity.set(x, y);
|
entity.set(x, y);
|
||||||
@@ -92,7 +91,6 @@ public class Renderer extends RendererModule{
|
|||||||
entity.effect = effect;
|
entity.effect = effect;
|
||||||
entity.color = color;
|
entity.color = color;
|
||||||
entity.rotation = rotation;
|
entity.rotation = rotation;
|
||||||
entity.lifetime = effect.lifetime;
|
|
||||||
entity.id ++;
|
entity.id ++;
|
||||||
entity.data = data;
|
entity.data = data;
|
||||||
entity.set(x, y);
|
entity.set(x, y);
|
||||||
@@ -207,6 +205,7 @@ public class Renderer extends RendererModule{
|
|||||||
EntityDraw.draw(groundEffectGroup, e -> e instanceof BelowLiquidTrait);
|
EntityDraw.draw(groundEffectGroup, e -> e instanceof BelowLiquidTrait);
|
||||||
EntityDraw.draw(puddleGroup);
|
EntityDraw.draw(puddleGroup);
|
||||||
EntityDraw.draw(groundEffectGroup, e -> !(e instanceof BelowLiquidTrait));
|
EntityDraw.draw(groundEffectGroup, e -> !(e instanceof BelowLiquidTrait));
|
||||||
|
EntityDraw.draw(itemGroup);
|
||||||
|
|
||||||
blocks.processBlocks();
|
blocks.processBlocks();
|
||||||
blocks.drawBlocks(Layer.block);
|
blocks.drawBlocks(Layer.block);
|
||||||
@@ -229,7 +228,7 @@ public class Renderer extends RendererModule{
|
|||||||
drawAllTeams(true);
|
drawAllTeams(true);
|
||||||
|
|
||||||
EntityDraw.draw(bulletGroup);
|
EntityDraw.draw(bulletGroup);
|
||||||
EntityDraw.draw(airItemGroup);
|
EntityDraw.draw(fireGroup);
|
||||||
EntityDraw.draw(effectGroup);
|
EntityDraw.draw(effectGroup);
|
||||||
|
|
||||||
overlays.drawTop();
|
overlays.drawTop();
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import io.anuke.ucore.core.Timers;
|
|||||||
import io.anuke.ucore.entities.Entities;
|
import io.anuke.ucore.entities.Entities;
|
||||||
import io.anuke.ucore.entities.EntityGroup;
|
import io.anuke.ucore.entities.EntityGroup;
|
||||||
import io.anuke.ucore.entities.EntityGroup.ArrayContainer;
|
import io.anuke.ucore.entities.EntityGroup.ArrayContainer;
|
||||||
import io.anuke.ucore.entities.component.Entity;
|
import io.anuke.ucore.entities.trait.Entity;
|
||||||
import io.anuke.ucore.util.Log;
|
import io.anuke.ucore.util.Log;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.control;
|
import static io.anuke.mindustry.Vars.control;
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import io.anuke.mindustry.Vars;
|
|||||||
import io.anuke.mindustry.content.Mechs;
|
import io.anuke.mindustry.content.Mechs;
|
||||||
import io.anuke.mindustry.content.Weapons;
|
import io.anuke.mindustry.content.Weapons;
|
||||||
import io.anuke.mindustry.entities.effect.DamageArea;
|
import io.anuke.mindustry.entities.effect.DamageArea;
|
||||||
|
import io.anuke.mindustry.entities.effect.ItemDrop;
|
||||||
import io.anuke.mindustry.entities.traits.BuilderTrait;
|
import io.anuke.mindustry.entities.traits.BuilderTrait;
|
||||||
import io.anuke.mindustry.entities.traits.TargetTrait;
|
import io.anuke.mindustry.entities.traits.TargetTrait;
|
||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.game.Team;
|
||||||
@@ -22,7 +23,7 @@ import io.anuke.mindustry.world.blocks.types.Floor;
|
|||||||
import io.anuke.mindustry.world.blocks.types.storage.CoreBlock.CoreEntity;
|
import io.anuke.mindustry.world.blocks.types.storage.CoreBlock.CoreEntity;
|
||||||
import io.anuke.ucore.core.*;
|
import io.anuke.ucore.core.*;
|
||||||
import io.anuke.ucore.entities.EntityGroup;
|
import io.anuke.ucore.entities.EntityGroup;
|
||||||
import io.anuke.ucore.entities.component.SolidTrait;
|
import io.anuke.ucore.entities.trait.SolidTrait;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
import io.anuke.ucore.graphics.Fill;
|
import io.anuke.ucore.graphics.Fill;
|
||||||
import io.anuke.ucore.graphics.Lines;
|
import io.anuke.ucore.graphics.Lines;
|
||||||
@@ -145,8 +146,8 @@ public class Player extends Unit implements BuilderTrait {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean collides(SolidTrait other){
|
public boolean collides(SolidTrait other) {
|
||||||
return !isDead() && super.collides(other) && !mech.flying;
|
return super.collides(other) || other instanceof ItemDrop;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
package io.anuke.mindustry.entities;
|
package io.anuke.mindustry.entities;
|
||||||
|
|
||||||
import io.anuke.mindustry.content.StatusEffects;
|
import io.anuke.mindustry.content.StatusEffects;
|
||||||
|
import io.anuke.mindustry.type.StatusEffect;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
|
|
||||||
/**Class for controlling status effects on an entity.*/
|
/**Class for controlling status effects on an entity.*/
|
||||||
public class StatusController {
|
public class StatusController {
|
||||||
private static final TransitionResult globalResult = new TransitionResult();
|
private static final TransitionResult globalResult = new TransitionResult();
|
||||||
|
|
||||||
private StatusEffect current = StatusEffects.none;
|
private io.anuke.mindustry.type.StatusEffect current = StatusEffects.none;
|
||||||
private float time;
|
private float time;
|
||||||
|
|
||||||
public void handleApply(Unit unit, StatusEffect effect, float intensity){
|
public void handleApply(Unit unit, io.anuke.mindustry.type.StatusEffect effect, float intensity){
|
||||||
if(effect == StatusEffects.none) return; //don't apply empty effects
|
if(effect == StatusEffects.none) return; //don't apply empty effects
|
||||||
|
|
||||||
float newTime = effect.baseDuration*intensity;
|
float newTime = effect.baseDuration*intensity;
|
||||||
@@ -44,12 +45,12 @@ public class StatusController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void set(StatusEffect current, float time){
|
public void set(io.anuke.mindustry.type.StatusEffect current, float time){
|
||||||
this.current = current;
|
this.current = current;
|
||||||
this.time = time;
|
this.time = time;
|
||||||
}
|
}
|
||||||
|
|
||||||
public StatusEffect current() {
|
public io.anuke.mindustry.type.StatusEffect current() {
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,7 +59,7 @@ public class StatusController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static class TransitionResult{
|
public static class TransitionResult{
|
||||||
public StatusEffect result;
|
public io.anuke.mindustry.type.StatusEffect result;
|
||||||
public float time;
|
public float time;
|
||||||
|
|
||||||
public TransitionResult set(StatusEffect effect, float time){
|
public TransitionResult set(StatusEffect effect, float time){
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package io.anuke.mindustry.entities;
|
|||||||
|
|
||||||
import com.badlogic.gdx.math.Vector2;
|
import com.badlogic.gdx.math.Vector2;
|
||||||
import io.anuke.mindustry.content.blocks.Blocks;
|
import io.anuke.mindustry.content.blocks.Blocks;
|
||||||
import io.anuke.mindustry.entities.bullet.Bullet;
|
|
||||||
import io.anuke.mindustry.entities.traits.SaveTrait;
|
import io.anuke.mindustry.entities.traits.SaveTrait;
|
||||||
import io.anuke.mindustry.entities.traits.SyncTrait;
|
import io.anuke.mindustry.entities.traits.SyncTrait;
|
||||||
import io.anuke.mindustry.entities.traits.TargetTrait;
|
import io.anuke.mindustry.entities.traits.TargetTrait;
|
||||||
@@ -11,12 +10,14 @@ import io.anuke.mindustry.game.Team;
|
|||||||
import io.anuke.mindustry.game.TeamInfo.TeamData;
|
import io.anuke.mindustry.game.TeamInfo.TeamData;
|
||||||
import io.anuke.mindustry.net.Interpolator;
|
import io.anuke.mindustry.net.Interpolator;
|
||||||
import io.anuke.mindustry.type.Item;
|
import io.anuke.mindustry.type.Item;
|
||||||
|
import io.anuke.mindustry.type.StatusEffect;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.mindustry.world.blocks.types.Floor;
|
import io.anuke.mindustry.world.blocks.types.Floor;
|
||||||
import io.anuke.ucore.core.Effects;
|
import io.anuke.ucore.core.Effects;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
import io.anuke.ucore.entities.component.DrawTrait;
|
import io.anuke.ucore.entities.trait.DamageTrait;
|
||||||
import io.anuke.ucore.entities.component.SolidTrait;
|
import io.anuke.ucore.entities.trait.DrawTrait;
|
||||||
|
import io.anuke.ucore.entities.trait.SolidTrait;
|
||||||
import io.anuke.ucore.entities.impl.DestructibleEntity;
|
import io.anuke.ucore.entities.impl.DestructibleEntity;
|
||||||
import io.anuke.ucore.util.Geometry;
|
import io.anuke.ucore.util.Geometry;
|
||||||
import io.anuke.ucore.util.Mathf;
|
import io.anuke.ucore.util.Mathf;
|
||||||
@@ -70,7 +71,8 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean collides(SolidTrait other){
|
public boolean collides(SolidTrait other){
|
||||||
return other instanceof Bullet && state.teams.areEnemies((((Bullet) other).team), team);
|
return other instanceof DamageTrait && other
|
||||||
|
instanceof TeamTrait && state.teams.areEnemies((((TeamTrait) other).getTeam()), team) && !isDead();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -110,10 +112,10 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
|
|||||||
this.health = health;
|
this.health = health;
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
this.status.set(StatusEffect.getByID(effect), etime);
|
this.status.set(io.anuke.mindustry.type.StatusEffect.getByID(effect), etime);
|
||||||
}
|
}
|
||||||
|
|
||||||
public StatusEffect getStatus(){
|
public io.anuke.mindustry.type.StatusEffect getStatus(){
|
||||||
return status.current();
|
return status.current();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,10 +27,6 @@ public class UnitInventory {
|
|||||||
return item != null && item.amount >= capacity;
|
return item != null && item.amount >= capacity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isInfiniteAmmo() {
|
|
||||||
return infiniteAmmo;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setInfiniteAmmo(boolean infinite){
|
public void setInfiniteAmmo(boolean infinite){
|
||||||
infiniteAmmo = infinite;
|
infiniteAmmo = infinite;
|
||||||
}
|
}
|
||||||
@@ -137,6 +133,10 @@ public class UnitInventory {
|
|||||||
return !hasItem() || (item.item == type && capacity - item.amount > 0);
|
return !hasItem() || (item.item == type && capacity - item.amount > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean canAcceptItem(Item type, int amount){
|
||||||
|
return !hasItem() || (item.item == type && item.amount + amount <= capacity);
|
||||||
|
}
|
||||||
|
|
||||||
public void clear(){
|
public void clear(){
|
||||||
item = null;
|
item = null;
|
||||||
ammos.clear();
|
ammos.clear();
|
||||||
|
|||||||
@@ -7,16 +7,16 @@ import io.anuke.mindustry.entities.traits.TeamTrait;
|
|||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.game.Team;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.ucore.entities.EntityGroup;
|
import io.anuke.ucore.entities.EntityGroup;
|
||||||
import io.anuke.ucore.entities.component.Entity;
|
import io.anuke.ucore.entities.trait.Entity;
|
||||||
import io.anuke.ucore.entities.component.SolidTrait;
|
import io.anuke.ucore.entities.trait.SolidTrait;
|
||||||
import io.anuke.ucore.entities.component.VelocityTrait;
|
import io.anuke.ucore.entities.trait.VelocityTrait;
|
||||||
import io.anuke.ucore.entities.impl.BulletEntity;
|
import io.anuke.ucore.entities.impl.BulletEntity;
|
||||||
import io.anuke.ucore.util.Timer;
|
import io.anuke.ucore.util.Timer;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.bulletGroup;
|
import static io.anuke.mindustry.Vars.bulletGroup;
|
||||||
import static io.anuke.mindustry.Vars.world;
|
import static io.anuke.mindustry.Vars.world;
|
||||||
|
|
||||||
public class Bullet extends BulletEntity<BulletType>{
|
public class Bullet extends BulletEntity<BulletType> implements TeamTrait{
|
||||||
private static Vector2 vector = new Vector2();
|
private static Vector2 vector = new Vector2();
|
||||||
|
|
||||||
public Timer timer = new Timer(3);
|
public Timer timer = new Timer(3);
|
||||||
@@ -52,6 +52,11 @@ public class Bullet extends BulletEntity<BulletType>{
|
|||||||
return true; //TODO make artillery and such not do this
|
return true; //TODO make artillery and such not do this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Team getTeam() {
|
||||||
|
return team;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(){
|
public void draw(){
|
||||||
type.draw(this);
|
type.draw(this);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package io.anuke.mindustry.entities.bullet;
|
|||||||
import com.badlogic.gdx.utils.Array;
|
import com.badlogic.gdx.utils.Array;
|
||||||
import io.anuke.mindustry.content.StatusEffects;
|
import io.anuke.mindustry.content.StatusEffects;
|
||||||
import io.anuke.mindustry.content.fx.BulletFx;
|
import io.anuke.mindustry.content.fx.BulletFx;
|
||||||
import io.anuke.mindustry.entities.StatusEffect;
|
import io.anuke.mindustry.type.StatusEffect;
|
||||||
import io.anuke.ucore.core.Effects;
|
import io.anuke.ucore.core.Effects;
|
||||||
import io.anuke.ucore.entities.impl.BaseBulletType;
|
import io.anuke.ucore.entities.impl.BaseBulletType;
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import io.anuke.mindustry.world.Tile;
|
|||||||
import io.anuke.ucore.core.Effects;
|
import io.anuke.ucore.core.Effects;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
import io.anuke.ucore.entities.EntityGroup;
|
import io.anuke.ucore.entities.EntityGroup;
|
||||||
import io.anuke.ucore.entities.component.DrawTrait;
|
import io.anuke.ucore.entities.trait.DrawTrait;
|
||||||
import io.anuke.ucore.entities.impl.TimedEntity;
|
import io.anuke.ucore.entities.impl.TimedEntity;
|
||||||
import io.anuke.ucore.util.Geometry;
|
import io.anuke.ucore.util.Geometry;
|
||||||
import io.anuke.ucore.util.Mathf;
|
import io.anuke.ucore.util.Mathf;
|
||||||
@@ -32,6 +32,7 @@ public class Fire extends TimedEntity implements SaveTrait, Poolable, DrawTrait
|
|||||||
private Tile tile;
|
private Tile tile;
|
||||||
private Block block;
|
private Block block;
|
||||||
private float baseFlammability = -1, puddleFlammability;
|
private float baseFlammability = -1, puddleFlammability;
|
||||||
|
private float lifetime;
|
||||||
|
|
||||||
/**Start a fire on the tile. If there already is a file there, refreshes its lifetime..*/
|
/**Start a fire on the tile. If there already is a file there, refreshes its lifetime..*/
|
||||||
public static void create(Tile tile){
|
public static void create(Tile tile){
|
||||||
@@ -59,6 +60,11 @@ public class Fire extends TimedEntity implements SaveTrait, Poolable, DrawTrait
|
|||||||
/**Deserialization use only!*/
|
/**Deserialization use only!*/
|
||||||
public Fire(){}
|
public Fire(){}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float lifetime() {
|
||||||
|
return lifetime;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
super.update();
|
super.update();
|
||||||
@@ -153,6 +159,6 @@ public class Fire extends TimedEntity implements SaveTrait, Poolable, DrawTrait
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EntityGroup targetGroup() {
|
public EntityGroup targetGroup() {
|
||||||
return airItemGroup;
|
return fireGroup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public class GroundEffectEntity extends EffectEntity {
|
|||||||
|
|
||||||
time = Mathf.clamp(time, 0, effect.staticLife);
|
time = Mathf.clamp(time, 0, effect.staticLife);
|
||||||
|
|
||||||
if (!once && time >= lifetime) {
|
if (!once && time >= lifetime()) {
|
||||||
once = true;
|
once = true;
|
||||||
time = 0f;
|
time = 0f;
|
||||||
Tile tile = Vars.world.tileWorld(x, y);
|
Tile tile = Vars.world.tileWorld(x, y);
|
||||||
@@ -42,7 +42,7 @@ public class GroundEffectEntity extends EffectEntity {
|
|||||||
GroundEffect effect = (GroundEffect)this.effect;
|
GroundEffect effect = (GroundEffect)this.effect;
|
||||||
|
|
||||||
if(once && effect.isStatic)
|
if(once && effect.isStatic)
|
||||||
Effects.renderEffect(id, effect, color, lifetime, rotation, x, y, data);
|
Effects.renderEffect(id, effect, color, lifetime(), rotation, x, y, data);
|
||||||
else
|
else
|
||||||
Effects.renderEffect(id, effect, color, time, rotation, x, y, data);
|
Effects.renderEffect(id, effect, color, time, rotation, x, y, data);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,28 +1,133 @@
|
|||||||
package io.anuke.mindustry.entities.effect;
|
package io.anuke.mindustry.entities.effect;
|
||||||
|
|
||||||
|
import com.badlogic.gdx.graphics.Color;
|
||||||
|
import com.badlogic.gdx.math.Vector2;
|
||||||
|
import com.badlogic.gdx.utils.Pool.Poolable;
|
||||||
import com.badlogic.gdx.utils.Pools;
|
import com.badlogic.gdx.utils.Pools;
|
||||||
|
import io.anuke.mindustry.entities.Player;
|
||||||
import io.anuke.mindustry.entities.traits.SyncTrait;
|
import io.anuke.mindustry.entities.traits.SyncTrait;
|
||||||
import io.anuke.mindustry.net.Interpolator;
|
import io.anuke.mindustry.net.Interpolator;
|
||||||
import io.anuke.mindustry.type.Item;
|
import io.anuke.mindustry.type.Item;
|
||||||
import io.anuke.ucore.entities.component.DrawTrait;
|
import io.anuke.mindustry.world.Tile;
|
||||||
|
import io.anuke.ucore.core.Effects;
|
||||||
|
import io.anuke.ucore.core.Timers;
|
||||||
|
import io.anuke.ucore.entities.EntityGroup;
|
||||||
import io.anuke.ucore.entities.impl.SolidEntity;
|
import io.anuke.ucore.entities.impl.SolidEntity;
|
||||||
|
import io.anuke.ucore.entities.trait.DrawTrait;
|
||||||
|
import io.anuke.ucore.entities.trait.SolidTrait;
|
||||||
|
import io.anuke.ucore.entities.trait.TimeTrait;
|
||||||
|
import io.anuke.ucore.entities.trait.VelocityTrait;
|
||||||
|
import io.anuke.ucore.graphics.Draw;
|
||||||
|
import io.anuke.ucore.util.Mathf;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
|
||||||
public class ItemDrop extends SolidEntity implements SyncTrait, DrawTrait {
|
import static io.anuke.mindustry.Vars.itemGroup;
|
||||||
|
import static io.anuke.mindustry.Vars.itemSize;
|
||||||
|
import static io.anuke.mindustry.Vars.world;
|
||||||
|
|
||||||
|
public class ItemDrop extends SolidEntity implements SyncTrait, DrawTrait, VelocityTrait, TimeTrait, Poolable {
|
||||||
|
private static final float sinkLifetime = 80f;
|
||||||
|
|
||||||
private Interpolator interpolator = new Interpolator();
|
private Interpolator interpolator = new Interpolator();
|
||||||
private Item item;
|
private Item item;
|
||||||
|
private int amount;
|
||||||
|
|
||||||
public static ItemDrop create(Item item, float x, float y){
|
private Vector2 velocity = new Vector2();
|
||||||
|
private float time;
|
||||||
|
private float sinktime;
|
||||||
|
|
||||||
|
public static ItemDrop create(Item item, int amount, float x, float y, float angle){
|
||||||
ItemDrop drop = Pools.obtain(ItemDrop.class);
|
ItemDrop drop = Pools.obtain(ItemDrop.class);
|
||||||
drop.item = item;
|
drop.item = item;
|
||||||
|
drop.amount = amount;
|
||||||
|
drop.velocity.set(4f, 0f).rotate(angle);
|
||||||
drop.set(x, y);
|
drop.set(x, y);
|
||||||
|
drop.add();
|
||||||
|
|
||||||
return drop;
|
return drop;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**Internal use only!*/
|
/**Internal use only!*/
|
||||||
public ItemDrop(){}
|
public ItemDrop(){
|
||||||
|
hitbox.setSize(5f);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float lifetime() {
|
||||||
|
return 60*60;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void time(float time) {
|
||||||
|
this.time = time;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float time() {
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Vector2 getVelocity() {
|
||||||
|
return velocity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean collides(SolidTrait other) {
|
||||||
|
return other instanceof Player && time > 20f;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void collision(SolidTrait other, float x, float y) {
|
||||||
|
Player player = (Player)other;
|
||||||
|
if(player.inventory.canAcceptItem(item, amount)){
|
||||||
|
player.inventory.addItem(item, amount);
|
||||||
|
remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw() {
|
||||||
|
float size = itemSize * (1f - sinktime/sinkLifetime);
|
||||||
|
|
||||||
|
Tile tile = world.tileWorld(x, y);
|
||||||
|
|
||||||
|
Draw.color(Color.WHITE, tile == null || !tile.floor().liquid ? Color.WHITE : tile.floor().liquidColor, sinktime/sinkLifetime);
|
||||||
|
Draw.rect(item.region, x, y, size, size);
|
||||||
|
|
||||||
|
int stored = Mathf.clamp(amount / 6, 1, 8);
|
||||||
|
|
||||||
|
for(int i = 0; i < stored; i ++) {
|
||||||
|
float px = Mathf.randomSeedRange(i + 1, 4f);
|
||||||
|
float py = Mathf.randomSeedRange(i + 2, 4f);
|
||||||
|
Draw.rect(item.region, x + px, y + py, size, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
Draw.color();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
updateVelocity(0.2f);
|
||||||
|
updateTime();
|
||||||
|
|
||||||
|
Tile tile = world.tileWorld(x, y);
|
||||||
|
|
||||||
|
if(tile.floor().liquid){
|
||||||
|
sinktime += Timers.delta();
|
||||||
|
|
||||||
|
if(Mathf.chance(0.04 * Timers.delta())){
|
||||||
|
Effects.effect(tile.floor().drownUpdateEffect, tile.floor().liquidColor, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(sinktime >= sinkLifetime){
|
||||||
|
remove();
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
sinktime = 0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removed() {
|
public void removed() {
|
||||||
@@ -30,8 +135,8 @@ public class ItemDrop extends SolidEntity implements SyncTrait, DrawTrait {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw() {
|
public void reset() {
|
||||||
|
time = 0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -44,6 +149,11 @@ public class ItemDrop extends SolidEntity implements SyncTrait, DrawTrait {
|
|||||||
return 10;
|
return 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EntityGroup targetGroup() {
|
||||||
|
return itemGroup;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void write(ByteBuffer data) {
|
public void write(ByteBuffer data) {
|
||||||
data.putFloat(x);
|
data.putFloat(x);
|
||||||
@@ -52,6 +162,7 @@ public class ItemDrop extends SolidEntity implements SyncTrait, DrawTrait {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void read(ByteBuffer data, long time) {
|
public void read(ByteBuffer data, long time) {
|
||||||
|
x = data.getFloat();
|
||||||
|
y = data.getFloat();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,14 +6,14 @@ import com.badlogic.gdx.utils.Pools;
|
|||||||
import io.anuke.mindustry.graphics.Palette;
|
import io.anuke.mindustry.graphics.Palette;
|
||||||
import io.anuke.mindustry.type.Item;
|
import io.anuke.mindustry.type.Item;
|
||||||
import io.anuke.ucore.entities.EntityGroup;
|
import io.anuke.ucore.entities.EntityGroup;
|
||||||
import io.anuke.ucore.entities.component.DrawTrait;
|
import io.anuke.ucore.entities.trait.DrawTrait;
|
||||||
import io.anuke.ucore.entities.impl.TimedEntity;
|
import io.anuke.ucore.entities.impl.TimedEntity;
|
||||||
import io.anuke.ucore.function.Callable;
|
import io.anuke.ucore.function.Callable;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
import io.anuke.ucore.graphics.Fill;
|
import io.anuke.ucore.graphics.Fill;
|
||||||
import io.anuke.ucore.graphics.Lines;
|
import io.anuke.ucore.graphics.Lines;
|
||||||
import io.anuke.ucore.util.Mathf;
|
import io.anuke.ucore.util.Mathf;
|
||||||
import io.anuke.ucore.util.Position;
|
import io.anuke.ucore.entities.trait.PosTrait;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.effectGroup;
|
import static io.anuke.mindustry.Vars.effectGroup;
|
||||||
|
|
||||||
@@ -23,22 +23,26 @@ public class ItemTransfer extends TimedEntity implements DrawTrait{
|
|||||||
private Vector2 tovec = new Vector2();
|
private Vector2 tovec = new Vector2();
|
||||||
private Item item;
|
private Item item;
|
||||||
private float seed;
|
private float seed;
|
||||||
private Position to;
|
private PosTrait to;
|
||||||
private Callable done;
|
private Callable done;
|
||||||
|
|
||||||
public static void create(Item item, float fromx, float fromy, Position to, Callable done){
|
public static void create(Item item, float fromx, float fromy, PosTrait to, Callable done){
|
||||||
ItemTransfer tr = Pools.obtain(ItemTransfer.class);
|
ItemTransfer tr = Pools.obtain(ItemTransfer.class);
|
||||||
tr.item = item;
|
tr.item = item;
|
||||||
tr.from.set(fromx, fromy);
|
tr.from.set(fromx, fromy);
|
||||||
tr.to = to;
|
tr.to = to;
|
||||||
tr.done = done;
|
tr.done = done;
|
||||||
tr.lifetime = 60f;
|
|
||||||
tr.seed = Mathf.range(1f);
|
tr.seed = Mathf.range(1f);
|
||||||
tr.add();
|
tr.add();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemTransfer(){}
|
public ItemTransfer(){}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float lifetime() {
|
||||||
|
return 60;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reset() {
|
public void reset() {
|
||||||
super.reset();
|
super.reset();
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import io.anuke.mindustry.graphics.Palette;
|
|||||||
import io.anuke.ucore.core.Effects;
|
import io.anuke.ucore.core.Effects;
|
||||||
import io.anuke.ucore.core.Effects.Effect;
|
import io.anuke.ucore.core.Effects.Effect;
|
||||||
import io.anuke.ucore.entities.EntityGroup;
|
import io.anuke.ucore.entities.EntityGroup;
|
||||||
import io.anuke.ucore.entities.component.SolidTrait;
|
import io.anuke.ucore.entities.trait.SolidTrait;
|
||||||
import io.anuke.ucore.entities.impl.TimedEntity;
|
import io.anuke.ucore.entities.impl.TimedEntity;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
import io.anuke.ucore.graphics.Lines;
|
import io.anuke.ucore.graphics.Lines;
|
||||||
@@ -39,7 +39,6 @@ public class Lightning extends TimedEntity implements Poolable{
|
|||||||
|
|
||||||
l.x = x;
|
l.x = x;
|
||||||
l.y = y;
|
l.y = y;
|
||||||
l.lifetime = 10f;
|
|
||||||
l.color = color;
|
l.color = color;
|
||||||
|
|
||||||
float step = 3f;
|
float step = 3f;
|
||||||
@@ -100,6 +99,11 @@ public class Lightning extends TimedEntity implements Poolable{
|
|||||||
/**For pooling use only. Do not call directly!*/
|
/**For pooling use only. Do not call directly!*/
|
||||||
public Lightning(){}
|
public Lightning(){}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float lifetime() {
|
||||||
|
return 10;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reset() {
|
public void reset() {
|
||||||
color = Palette.lancerLaser;
|
color = Palette.lancerLaser;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import io.anuke.mindustry.world.Tile;
|
|||||||
import io.anuke.ucore.core.Effects;
|
import io.anuke.ucore.core.Effects;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
import io.anuke.ucore.entities.EntityGroup;
|
import io.anuke.ucore.entities.EntityGroup;
|
||||||
import io.anuke.ucore.entities.component.DrawTrait;
|
import io.anuke.ucore.entities.trait.DrawTrait;
|
||||||
import io.anuke.ucore.entities.impl.BaseEntity;
|
import io.anuke.ucore.entities.impl.BaseEntity;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
import io.anuke.ucore.graphics.Fill;
|
import io.anuke.ucore.graphics.Fill;
|
||||||
|
|||||||
@@ -22,8 +22,9 @@ public class Rubble extends TimedEntity implements BelowLiquidTrait {
|
|||||||
rubble.add();
|
rubble.add();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Rubble(){
|
@Override
|
||||||
lifetime = 7000f;
|
public float lifetime() {
|
||||||
|
return 7000f;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package io.anuke.mindustry.entities.traits;
|
package io.anuke.mindustry.entities.traits;
|
||||||
|
|
||||||
import io.anuke.ucore.entities.component.Entity;
|
import io.anuke.ucore.entities.trait.Entity;
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package io.anuke.mindustry.entities.traits;
|
|||||||
|
|
||||||
import com.badlogic.gdx.Gdx;
|
import com.badlogic.gdx.Gdx;
|
||||||
import io.anuke.mindustry.net.Interpolator;
|
import io.anuke.mindustry.net.Interpolator;
|
||||||
import io.anuke.ucore.entities.component.Entity;
|
import io.anuke.ucore.entities.trait.Entity;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package io.anuke.mindustry.entities.traits;
|
package io.anuke.mindustry.entities.traits;
|
||||||
|
|
||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.game.Team;
|
||||||
import io.anuke.ucore.entities.component.VelocityTrait;
|
import io.anuke.ucore.entities.trait.VelocityTrait;
|
||||||
import io.anuke.ucore.util.Position;
|
import io.anuke.ucore.entities.trait.PosTrait;
|
||||||
|
|
||||||
/**Base interface for targetable entities.*/
|
/**Base interface for targetable entities.*/
|
||||||
public interface TargetTrait extends Position, VelocityTrait {
|
public interface TargetTrait extends PosTrait, VelocityTrait {
|
||||||
|
|
||||||
boolean isDead();
|
boolean isDead();
|
||||||
Team getTeam();
|
Team getTeam();
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package io.anuke.mindustry.entities.traits;
|
package io.anuke.mindustry.entities.traits;
|
||||||
|
|
||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.game.Team;
|
||||||
import io.anuke.ucore.entities.component.Entity;
|
import io.anuke.ucore.entities.trait.Entity;
|
||||||
|
|
||||||
public interface TeamTrait extends Entity {
|
public interface TeamTrait extends Entity {
|
||||||
Team getTeam();
|
Team getTeam();
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ public class DesktopInput extends InputHandler{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(canTapPlayer(Graphics.mouseWorld().x, Graphics.mouseWorld().y)){
|
if(canTapPlayer(Graphics.mouseWorld().x, Graphics.mouseWorld().y)){
|
||||||
cursorType = drill;
|
cursorType = unload;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -246,7 +246,7 @@ public class DesktopInput extends InputHandler{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tryDropItems(cursor.target());
|
tryDropItems(cursor.target(), Graphics.world(screenX, screenY).x, Graphics.world(screenX, screenY).y);
|
||||||
|
|
||||||
mode = none;
|
mode = none;
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package io.anuke.mindustry.input;
|
|||||||
import com.badlogic.gdx.InputAdapter;
|
import com.badlogic.gdx.InputAdapter;
|
||||||
import com.badlogic.gdx.math.Vector2;
|
import com.badlogic.gdx.math.Vector2;
|
||||||
import io.anuke.mindustry.content.blocks.Blocks;
|
import io.anuke.mindustry.content.blocks.Blocks;
|
||||||
|
import io.anuke.mindustry.entities.effect.ItemDrop;
|
||||||
import io.anuke.mindustry.entities.traits.BuilderTrait.BuildRequest;
|
import io.anuke.mindustry.entities.traits.BuilderTrait.BuildRequest;
|
||||||
import io.anuke.mindustry.entities.Player;
|
import io.anuke.mindustry.entities.Player;
|
||||||
import io.anuke.mindustry.entities.effect.ItemTransfer;
|
import io.anuke.mindustry.entities.effect.ItemTransfer;
|
||||||
@@ -189,7 +190,7 @@ public abstract class InputHandler extends InputAdapter{
|
|||||||
return droppingItem;
|
return droppingItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void tryDropItems(Tile tile){
|
public void tryDropItems(Tile tile, float x, float y){
|
||||||
if(!droppingItem || !player.inventory.hasItem() || !tile.block().hasItems){
|
if(!droppingItem || !player.inventory.hasItem() || !tile.block().hasItems){
|
||||||
droppingItem = false;
|
droppingItem = false;
|
||||||
return;
|
return;
|
||||||
@@ -240,6 +241,9 @@ public abstract class InputHandler extends InputAdapter{
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}else{
|
||||||
|
ItemDrop.create(stack.item, stack.amount, player.x, player.y, player.angleTo(x, y));
|
||||||
|
player.inventory.clearItem();
|
||||||
}
|
}
|
||||||
//TODO create drop on the ground otherwise
|
//TODO create drop on the ground otherwise
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,15 +20,11 @@ import java.io.IOException;
|
|||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
|
||||||
/**Reads and writes map files.*/
|
/**Reads and writes map files.*/
|
||||||
//TODO GWT support
|
|
||||||
//TODO map header that maps block names to IDs for backwards compatibility
|
|
||||||
public class MapIO {
|
public class MapIO {
|
||||||
private static final int version = 0;
|
private static final int version = 0;
|
||||||
private static final IntIntMap defaultBlockMap = new IntIntMap();
|
private static IntIntMap defaultBlockMap = new IntIntMap();
|
||||||
|
|
||||||
//TODO static initializers are evil, remove
|
|
||||||
static{
|
|
||||||
|
|
||||||
|
private static void loadDefaultBlocks(){
|
||||||
for(Block block : Block.getAllBlocks()){
|
for(Block block : Block.getAllBlocks()){
|
||||||
defaultBlockMap.put(block.id, block.id);
|
defaultBlockMap.put(block.id, block.id);
|
||||||
}
|
}
|
||||||
@@ -77,6 +73,10 @@ public class MapIO {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void writeMap(OutputStream stream, ObjectMap<String, String> tags, MapTileData data) throws IOException{
|
public static void writeMap(OutputStream stream, ObjectMap<String, String> tags, MapTileData data) throws IOException{
|
||||||
|
if(defaultBlockMap == null){
|
||||||
|
loadDefaultBlocks();
|
||||||
|
}
|
||||||
|
|
||||||
MapMeta meta = new MapMeta(version, tags, data.width(), data.height(), defaultBlockMap);
|
MapMeta meta = new MapMeta(version, tags, data.width(), data.height(), defaultBlockMap);
|
||||||
|
|
||||||
DataOutputStream ds = new DataOutputStream(stream);
|
DataOutputStream ds = new DataOutputStream(stream);
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import io.anuke.mindustry.world.blocks.types.BlockPart;
|
|||||||
import io.anuke.ucore.entities.Entities;
|
import io.anuke.ucore.entities.Entities;
|
||||||
import io.anuke.ucore.entities.EntityGroup;
|
import io.anuke.ucore.entities.EntityGroup;
|
||||||
import io.anuke.ucore.entities.EntityPhysics;
|
import io.anuke.ucore.entities.EntityPhysics;
|
||||||
import io.anuke.ucore.entities.component.Entity;
|
import io.anuke.ucore.entities.trait.Entity;
|
||||||
import io.anuke.ucore.util.Bits;
|
import io.anuke.ucore.util.Bits;
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package io.anuke.mindustry.type;
|
|||||||
import com.badlogic.gdx.graphics.Color;
|
import com.badlogic.gdx.graphics.Color;
|
||||||
import com.badlogic.gdx.utils.Array;
|
import com.badlogic.gdx.utils.Array;
|
||||||
import io.anuke.mindustry.content.StatusEffects;
|
import io.anuke.mindustry.content.StatusEffects;
|
||||||
import io.anuke.mindustry.entities.StatusEffect;
|
|
||||||
import io.anuke.mindustry.game.Content;
|
import io.anuke.mindustry.game.Content;
|
||||||
import io.anuke.ucore.util.Bundles;
|
import io.anuke.ucore.util.Bundles;
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
package io.anuke.mindustry.entities;
|
package io.anuke.mindustry.type;
|
||||||
|
|
||||||
import com.badlogic.gdx.utils.Array;
|
import com.badlogic.gdx.utils.Array;
|
||||||
import com.badlogic.gdx.utils.ObjectSet;
|
import com.badlogic.gdx.utils.ObjectSet;
|
||||||
import io.anuke.mindustry.entities.StatusController.TransitionResult;
|
import io.anuke.mindustry.entities.StatusController.TransitionResult;
|
||||||
|
import io.anuke.mindustry.entities.Unit;
|
||||||
|
|
||||||
public class StatusEffect{
|
public class StatusEffect{
|
||||||
private static final Array<StatusEffect> array = new Array<>();
|
private static final Array<StatusEffect> array = new Array<>();
|
||||||
@@ -5,8 +5,8 @@ import com.badlogic.gdx.math.Vector2;
|
|||||||
import com.badlogic.gdx.utils.Align;
|
import com.badlogic.gdx.utils.Align;
|
||||||
import com.badlogic.gdx.utils.IntSet;
|
import com.badlogic.gdx.utils.IntSet;
|
||||||
import io.anuke.mindustry.core.GameState.State;
|
import io.anuke.mindustry.core.GameState.State;
|
||||||
import io.anuke.mindustry.entities.effect.ItemTransfer;
|
|
||||||
import io.anuke.mindustry.entities.Player;
|
import io.anuke.mindustry.entities.Player;
|
||||||
|
import io.anuke.mindustry.entities.effect.ItemTransfer;
|
||||||
import io.anuke.mindustry.input.InputHandler;
|
import io.anuke.mindustry.input.InputHandler;
|
||||||
import io.anuke.mindustry.type.Item;
|
import io.anuke.mindustry.type.Item;
|
||||||
import io.anuke.mindustry.ui.ItemImage;
|
import io.anuke.mindustry.ui.ItemImage;
|
||||||
|
|||||||
@@ -15,13 +15,13 @@ import io.anuke.mindustry.world.blocks.types.modules.LiquidModule;
|
|||||||
import io.anuke.mindustry.world.blocks.types.modules.PowerModule;
|
import io.anuke.mindustry.world.blocks.types.modules.PowerModule;
|
||||||
import io.anuke.ucore.function.Consumer;
|
import io.anuke.ucore.function.Consumer;
|
||||||
import io.anuke.ucore.util.Bits;
|
import io.anuke.ucore.util.Bits;
|
||||||
import io.anuke.ucore.util.Position;
|
import io.anuke.ucore.entities.trait.PosTrait;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.tilesize;
|
import static io.anuke.mindustry.Vars.tilesize;
|
||||||
import static io.anuke.mindustry.Vars.world;
|
import static io.anuke.mindustry.Vars.world;
|
||||||
|
|
||||||
|
|
||||||
public class Tile implements Position, TargetTrait {
|
public class Tile implements PosTrait, TargetTrait {
|
||||||
public static final Object tileSetLock = new Object();
|
public static final Object tileSetLock = new Object();
|
||||||
|
|
||||||
/**Block ID data.*/
|
/**Block ID data.*/
|
||||||
@@ -360,6 +360,12 @@ public class Tile implements Position, TargetTrait {
|
|||||||
return drawy();
|
return drawy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setX(float x) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setY(float y) {}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString(){
|
public String toString(){
|
||||||
Block block = block();
|
Block block = block();
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import com.badlogic.gdx.math.MathUtils;
|
|||||||
import com.badlogic.gdx.math.Vector2;
|
import com.badlogic.gdx.math.Vector2;
|
||||||
import io.anuke.mindustry.content.StatusEffects;
|
import io.anuke.mindustry.content.StatusEffects;
|
||||||
import io.anuke.mindustry.content.fx.BlockFx;
|
import io.anuke.mindustry.content.fx.BlockFx;
|
||||||
import io.anuke.mindustry.entities.StatusEffect;
|
import io.anuke.mindustry.type.StatusEffect;
|
||||||
import io.anuke.mindustry.type.Liquid;
|
import io.anuke.mindustry.type.Liquid;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import java.io.DataInputStream;
|
|||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import static io.anuke.mindustry.Vars.itemSize;
|
||||||
import static io.anuke.mindustry.Vars.tilesize;
|
import static io.anuke.mindustry.Vars.tilesize;
|
||||||
|
|
||||||
public class Conveyor extends Block{
|
public class Conveyor extends Block{
|
||||||
@@ -27,7 +28,6 @@ public class Conveyor extends Block{
|
|||||||
private static final float itemSpace = 0.135f * 2.2f;
|
private static final float itemSpace = 0.135f * 2.2f;
|
||||||
private static final float offsetScl = 128f*3f;
|
private static final float offsetScl = 128f*3f;
|
||||||
private static final float minmove = 1f / (Short.MAX_VALUE - 2);
|
private static final float minmove = 1f / (Short.MAX_VALUE - 2);
|
||||||
private static final float itemSize = 5f;
|
|
||||||
|
|
||||||
private final Translator tr1 = new Translator();
|
private final Translator tr1 = new Translator();
|
||||||
private final Translator tr2 = new Translator();
|
private final Translator tr2 = new Translator();
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package io.anuke.kryonet;
|
|||||||
import io.anuke.mindustry.core.ThreadHandler.ThreadProvider;
|
import io.anuke.mindustry.core.ThreadHandler.ThreadProvider;
|
||||||
import io.anuke.ucore.entities.EntityGroup;
|
import io.anuke.ucore.entities.EntityGroup;
|
||||||
import io.anuke.ucore.entities.EntityGroup.EntityContainer;
|
import io.anuke.ucore.entities.EntityGroup.EntityContainer;
|
||||||
import io.anuke.ucore.entities.component.Entity;
|
import io.anuke.ucore.entities.trait.Entity;
|
||||||
import io.anuke.ucore.util.Log;
|
import io.anuke.ucore.util.Log;
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|||||||
Reference in New Issue
Block a user