From 0b28f97d8f792abbd4b53a66decaef4cd371a7f3 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 27 May 2018 15:17:35 -0400 Subject: [PATCH] Bullet refactoring --- core/src/io/anuke/mindustry/Vars.java | 2 +- .../content/bullets/TurretBullets.java | 4 +- .../content/bullets/WeaponBullets.java | 4 +- core/src/io/anuke/mindustry/core/Logic.java | 4 +- .../io/anuke/mindustry/core/NetClient.java | 2 +- .../io/anuke/mindustry/core/NetServer.java | 2 +- .../io/anuke/mindustry/entities/Player.java | 1 + .../anuke/mindustry/entities/SyncEntity.java | 1 + .../anuke/mindustry/entities/TileEntity.java | 3 +- .../src/io/anuke/mindustry/entities/Unit.java | 3 +- .../entities/bullet/BasicBulletType.java | 45 +++++++++++++++++++ .../entities/{ => bullet}/Bullet.java | 4 +- .../entities/{ => bullet}/BulletType.java | 3 +- .../mindustry/entities/effect/DamageArea.java | 2 +- .../mindustry/entities/effect/Puddle.java | 2 +- .../mindustry/entities/units/BaseUnit.java | 4 +- .../mindustry/entities/units/UnitType.java | 2 +- .../src/io/anuke/mindustry/type/AmmoType.java | 2 +- core/src/io/anuke/mindustry/type/Weapon.java | 2 +- .../mindustry/ui/fragments/DebugFragment.java | 2 +- .../world/blocks/types/defense/Turret.java | 3 +- 21 files changed, 75 insertions(+), 22 deletions(-) create mode 100644 core/src/io/anuke/mindustry/entities/bullet/BasicBulletType.java rename core/src/io/anuke/mindustry/entities/{ => bullet}/Bullet.java (95%) rename core/src/io/anuke/mindustry/entities/{ => bullet}/BulletType.java (89%) diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java index 5ce660d462..1b52fc91a7 100644 --- a/core/src/io/anuke/mindustry/Vars.java +++ b/core/src/io/anuke/mindustry/Vars.java @@ -5,7 +5,7 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.Color; import io.anuke.mindustry.core.*; -import io.anuke.mindustry.entities.Bullet; +import io.anuke.mindustry.entities.bullet.Bullet; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.entities.effect.Fire; diff --git a/core/src/io/anuke/mindustry/content/bullets/TurretBullets.java b/core/src/io/anuke/mindustry/content/bullets/TurretBullets.java index ac84d2b9e6..1b8a4e4674 100644 --- a/core/src/io/anuke/mindustry/content/bullets/TurretBullets.java +++ b/core/src/io/anuke/mindustry/content/bullets/TurretBullets.java @@ -7,8 +7,8 @@ import io.anuke.mindustry.content.StatusEffects; import io.anuke.mindustry.content.fx.BulletFx; import io.anuke.mindustry.content.fx.EnvironmentFx; import io.anuke.mindustry.content.fx.Fx; -import io.anuke.mindustry.entities.Bullet; -import io.anuke.mindustry.entities.BulletType; +import io.anuke.mindustry.entities.bullet.Bullet; +import io.anuke.mindustry.entities.bullet.BulletType; import io.anuke.mindustry.entities.effect.DamageArea; import io.anuke.mindustry.entities.effect.Fire; import io.anuke.mindustry.entities.effect.Lightning; diff --git a/core/src/io/anuke/mindustry/content/bullets/WeaponBullets.java b/core/src/io/anuke/mindustry/content/bullets/WeaponBullets.java index 03dc73bff7..1b12e70ac3 100644 --- a/core/src/io/anuke/mindustry/content/bullets/WeaponBullets.java +++ b/core/src/io/anuke/mindustry/content/bullets/WeaponBullets.java @@ -1,7 +1,7 @@ package io.anuke.mindustry.content.bullets; -import io.anuke.mindustry.entities.Bullet; -import io.anuke.mindustry.entities.BulletType; +import io.anuke.mindustry.entities.bullet.Bullet; +import io.anuke.mindustry.entities.bullet.BulletType; public class WeaponBullets { public static final BulletType diff --git a/core/src/io/anuke/mindustry/core/Logic.java b/core/src/io/anuke/mindustry/core/Logic.java index e0a3116680..ac6730dd9f 100644 --- a/core/src/io/anuke/mindustry/core/Logic.java +++ b/core/src/io/anuke/mindustry/core/Logic.java @@ -11,7 +11,6 @@ import io.anuke.mindustry.game.EventType.ResetEvent; import io.anuke.mindustry.game.EventType.WaveEvent; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.game.TeamInfo; -import io.anuke.mindustry.game.TeamInfo.TeamData; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.ItemType; @@ -106,6 +105,7 @@ public class Logic extends Module { Timers.update(); } + /* boolean gameOver = true; for(TeamData data : state.teams.getTeams(true)){ @@ -115,7 +115,7 @@ public class Logic extends Module { } } - /* if(gameOver && !state.gameOver){ //TODO better gameover state, victory state? + if(gameOver && !state.gameOver){ //TODO better gameover state, victory state? state.gameOver = true; if(Net.server()) NetEvents.handleGameOver(); Events.fire(GameOverEvent.class); diff --git a/core/src/io/anuke/mindustry/core/NetClient.java b/core/src/io/anuke/mindustry/core/NetClient.java index 6eac54287a..d769022050 100644 --- a/core/src/io/anuke/mindustry/core/NetClient.java +++ b/core/src/io/anuke/mindustry/core/NetClient.java @@ -4,7 +4,7 @@ import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.utils.IntMap; import com.badlogic.gdx.utils.IntSet; import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.entities.BulletType; +import io.anuke.mindustry.entities.bullet.BulletType; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.entities.SyncEntity; import io.anuke.mindustry.entities.units.BaseUnit; diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index d601c841d7..84f9f17601 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -6,7 +6,7 @@ import com.badlogic.gdx.utils.TimeUtils; import io.anuke.mindustry.Vars; import io.anuke.mindustry.content.Mechs; import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.entities.BulletType; +import io.anuke.mindustry.entities.bullet.BulletType; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.entities.SyncEntity; import io.anuke.mindustry.gen.CallServer; diff --git a/core/src/io/anuke/mindustry/entities/Player.java b/core/src/io/anuke/mindustry/entities/Player.java index e5c463a5e0..76dd3731cb 100644 --- a/core/src/io/anuke/mindustry/entities/Player.java +++ b/core/src/io/anuke/mindustry/entities/Player.java @@ -10,6 +10,7 @@ import com.badlogic.gdx.utils.Queue; import io.anuke.mindustry.content.Mechs; import io.anuke.mindustry.content.Weapons; import io.anuke.mindustry.content.fx.ExplosionFx; +import io.anuke.mindustry.entities.bullet.BulletType; import io.anuke.mindustry.entities.effect.DamageArea; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.graphics.Palette; diff --git a/core/src/io/anuke/mindustry/entities/SyncEntity.java b/core/src/io/anuke/mindustry/entities/SyncEntity.java index d86f7b4719..cc4ae0ce7c 100644 --- a/core/src/io/anuke/mindustry/entities/SyncEntity.java +++ b/core/src/io/anuke/mindustry/entities/SyncEntity.java @@ -4,6 +4,7 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.utils.TimeUtils; +import io.anuke.mindustry.entities.bullet.BulletType; import io.anuke.ucore.core.Timers; import io.anuke.ucore.entities.DestructibleEntity; import io.anuke.ucore.util.Mathf; diff --git a/core/src/io/anuke/mindustry/entities/TileEntity.java b/core/src/io/anuke/mindustry/entities/TileEntity.java index b2e4881b60..5012b2ca08 100644 --- a/core/src/io/anuke/mindustry/entities/TileEntity.java +++ b/core/src/io/anuke/mindustry/entities/TileEntity.java @@ -1,6 +1,7 @@ package io.anuke.mindustry.entities; import io.anuke.mindustry.content.fx.Fx; +import io.anuke.mindustry.entities.bullet.Bullet; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.NetEvents; import io.anuke.mindustry.world.Block; @@ -108,7 +109,7 @@ public class TileEntity extends Entity{ } } - public boolean collide(Bullet other){ + public boolean collide(io.anuke.mindustry.entities.bullet.Bullet other){ return true; } diff --git a/core/src/io/anuke/mindustry/entities/Unit.java b/core/src/io/anuke/mindustry/entities/Unit.java index fdd5d8820f..f3e48a7d61 100644 --- a/core/src/io/anuke/mindustry/entities/Unit.java +++ b/core/src/io/anuke/mindustry/entities/Unit.java @@ -2,6 +2,7 @@ package io.anuke.mindustry.entities; import com.badlogic.gdx.math.Vector2; import io.anuke.mindustry.content.blocks.Blocks; +import io.anuke.mindustry.entities.bullet.Bullet; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.game.TeamInfo.TeamData; import io.anuke.mindustry.type.Item; @@ -40,7 +41,7 @@ public abstract class Unit extends SyncEntity implements SerializableEntity { @Override public boolean collides(SolidEntity other){ - return other instanceof Bullet && state.teams.areEnemies((((Bullet) other).team), team); + return other instanceof io.anuke.mindustry.entities.bullet.Bullet && state.teams.areEnemies((((Bullet) other).team), team); } @Override diff --git a/core/src/io/anuke/mindustry/entities/bullet/BasicBulletType.java b/core/src/io/anuke/mindustry/entities/bullet/BasicBulletType.java new file mode 100644 index 0000000000..7754daa5d0 --- /dev/null +++ b/core/src/io/anuke/mindustry/entities/bullet/BasicBulletType.java @@ -0,0 +1,45 @@ +package io.anuke.mindustry.entities.bullet; + +import com.badlogic.gdx.graphics.Color; +import io.anuke.mindustry.content.bullets.TurretBullets; +import io.anuke.mindustry.graphics.Palette; +import io.anuke.ucore.util.Angles; +import io.anuke.ucore.util.Mathf; + +/**A BulletType for most ammo-based bullets shot from turrets and units.*/ +public abstract class BasicBulletType extends BulletType { + public Color backColor = Palette.bulletYellowBack, frontColor = Palette.bulletYellow; + public String bulletSprite = "bullet"; + public float bulletWidth = 5f, bulletHeight = 7f; + + public boolean frag; + public int fragBullets = 9; + public float fragVelocityMin = 0.2f, fragVelocityMax = 1f; + public BulletType fragBullet = TurretBullets.basicLeadFrag; + + public BasicBulletType(float speed, float damage) { + super(speed, damage); + } + + @Override + public void hit(Bullet b, float x, float y) { + super.hit(b, x, y); + + if(frag) { + for (int i = 0; i < fragBullets; i++) { + float len = Mathf.random(1f, 7f); + float a = Mathf.random(360f); + Bullet bullet = Bullet.create(fragBullet, b, + x + Angles.trnsx(a, len), y + Angles.trnsy(a, len), a); + bullet.velocity.scl(Mathf.random(fragVelocityMin, fragVelocityMax)); + } + } + } + + @Override + public void despawned(Bullet b) { + if(frag){ + hit(b); + } + } +} diff --git a/core/src/io/anuke/mindustry/entities/Bullet.java b/core/src/io/anuke/mindustry/entities/bullet/Bullet.java similarity index 95% rename from core/src/io/anuke/mindustry/entities/Bullet.java rename to core/src/io/anuke/mindustry/entities/bullet/Bullet.java index 58c4b07e0c..2f6a916b95 100644 --- a/core/src/io/anuke/mindustry/entities/Bullet.java +++ b/core/src/io/anuke/mindustry/entities/bullet/Bullet.java @@ -1,7 +1,9 @@ -package io.anuke.mindustry.entities; +package io.anuke.mindustry.entities.bullet; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Pools; +import io.anuke.mindustry.entities.SyncEntity; +import io.anuke.mindustry.entities.Unit; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.world.Tile; import io.anuke.ucore.entities.BulletEntity; diff --git a/core/src/io/anuke/mindustry/entities/BulletType.java b/core/src/io/anuke/mindustry/entities/bullet/BulletType.java similarity index 89% rename from core/src/io/anuke/mindustry/entities/BulletType.java rename to core/src/io/anuke/mindustry/entities/bullet/BulletType.java index 1c94cad697..07268afc72 100644 --- a/core/src/io/anuke/mindustry/entities/BulletType.java +++ b/core/src/io/anuke/mindustry/entities/bullet/BulletType.java @@ -1,7 +1,8 @@ -package io.anuke.mindustry.entities; +package io.anuke.mindustry.entities.bullet; import io.anuke.mindustry.content.StatusEffects; import io.anuke.mindustry.content.fx.BulletFx; +import io.anuke.mindustry.entities.StatusEffect; import io.anuke.ucore.core.Effects; import io.anuke.ucore.entities.BaseBulletType; diff --git a/core/src/io/anuke/mindustry/entities/effect/DamageArea.java b/core/src/io/anuke/mindustry/entities/effect/DamageArea.java index 1134f85298..9f0dfb0dca 100644 --- a/core/src/io/anuke/mindustry/entities/effect/DamageArea.java +++ b/core/src/io/anuke/mindustry/entities/effect/DamageArea.java @@ -6,7 +6,7 @@ import com.badlogic.gdx.math.Vector2; import io.anuke.mindustry.content.bullets.TurretBullets; import io.anuke.mindustry.content.fx.ExplosionFx; import io.anuke.mindustry.content.fx.Fx; -import io.anuke.mindustry.entities.Bullet; +import io.anuke.mindustry.entities.bullet.Bullet; import io.anuke.mindustry.entities.Unit; import io.anuke.mindustry.entities.Units; import io.anuke.mindustry.game.Team; diff --git a/core/src/io/anuke/mindustry/entities/effect/Puddle.java b/core/src/io/anuke/mindustry/entities/effect/Puddle.java index 081004b2b1..3a574de1cb 100644 --- a/core/src/io/anuke/mindustry/entities/effect/Puddle.java +++ b/core/src/io/anuke/mindustry/entities/effect/Puddle.java @@ -11,7 +11,7 @@ import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.mindustry.content.bullets.TurretBullets; import io.anuke.mindustry.content.fx.BlockFx; import io.anuke.mindustry.content.fx.EnvironmentFx; -import io.anuke.mindustry.entities.Bullet; +import io.anuke.mindustry.entities.bullet.Bullet; import io.anuke.mindustry.entities.SerializableEntity; import io.anuke.mindustry.entities.Units; import io.anuke.mindustry.game.Team; diff --git a/core/src/io/anuke/mindustry/entities/units/BaseUnit.java b/core/src/io/anuke/mindustry/entities/units/BaseUnit.java index 5b76077339..64a90275dc 100644 --- a/core/src/io/anuke/mindustry/entities/units/BaseUnit.java +++ b/core/src/io/anuke/mindustry/entities/units/BaseUnit.java @@ -1,7 +1,7 @@ package io.anuke.mindustry.entities.units; -import io.anuke.mindustry.entities.Bullet; -import io.anuke.mindustry.entities.BulletType; +import io.anuke.mindustry.entities.bullet.Bullet; +import io.anuke.mindustry.entities.bullet.BulletType; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.entities.Unit; import io.anuke.mindustry.game.Team; diff --git a/core/src/io/anuke/mindustry/entities/units/UnitType.java b/core/src/io/anuke/mindustry/entities/units/UnitType.java index ca451507dd..d72435abe5 100644 --- a/core/src/io/anuke/mindustry/entities/units/UnitType.java +++ b/core/src/io/anuke/mindustry/entities/units/UnitType.java @@ -3,7 +3,7 @@ package io.anuke.mindustry.entities.units; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.ObjectMap; import io.anuke.mindustry.content.fx.ExplosionFx; -import io.anuke.mindustry.entities.Bullet; +import io.anuke.mindustry.entities.bullet.Bullet; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.entities.Unit; import io.anuke.mindustry.net.Net; diff --git a/core/src/io/anuke/mindustry/type/AmmoType.java b/core/src/io/anuke/mindustry/type/AmmoType.java index 3bb5dd91e9..3fefc348e4 100644 --- a/core/src/io/anuke/mindustry/type/AmmoType.java +++ b/core/src/io/anuke/mindustry/type/AmmoType.java @@ -2,7 +2,7 @@ package io.anuke.mindustry.type; import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.content.fx.Fx; -import io.anuke.mindustry.entities.BulletType; +import io.anuke.mindustry.entities.bullet.BulletType; import io.anuke.ucore.core.Effects.Effect; public class AmmoType { diff --git a/core/src/io/anuke/mindustry/type/Weapon.java b/core/src/io/anuke/mindustry/type/Weapon.java index 3417634016..9fd0ea3f1f 100644 --- a/core/src/io/anuke/mindustry/type/Weapon.java +++ b/core/src/io/anuke/mindustry/type/Weapon.java @@ -3,7 +3,7 @@ package io.anuke.mindustry.type; import com.badlogic.gdx.utils.ObjectMap; import io.anuke.mindustry.Vars; import io.anuke.mindustry.content.fx.Fx; -import io.anuke.mindustry.entities.Bullet; +import io.anuke.mindustry.entities.bullet.Bullet; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.entities.Unit; import io.anuke.mindustry.net.Net; diff --git a/core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java b/core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java index ac4baeb127..9f716d80ea 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java @@ -4,7 +4,7 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.files.FileHandle; import io.anuke.mindustry.content.UnitTypes; import io.anuke.mindustry.content.bullets.TurretBullets; -import io.anuke.mindustry.entities.Bullet; +import io.anuke.mindustry.entities.bullet.Bullet; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.entities.units.BaseUnit; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java b/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java index 1e43b2a4cf..f152e498ae 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java @@ -5,6 +5,7 @@ import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.content.fx.Fx; import io.anuke.mindustry.entities.*; +import io.anuke.mindustry.entities.bullet.BulletType; import io.anuke.mindustry.graphics.Layer; import io.anuke.mindustry.graphics.Palette; import io.anuke.mindustry.type.AmmoEntry; @@ -229,7 +230,7 @@ public abstract class Turret extends Block{ } protected void bullet(Tile tile, BulletType type, float angle){ - Bullet.create(type, tile.entity, tile.getTeam(), tile.drawx() + tr.x, tile.drawy() + tr.y, angle); + io.anuke.mindustry.entities.bullet.Bullet.create(type, tile.entity, tile.getTeam(), tile.drawx() + tr.x, tile.drawy() + tr.y, angle); } protected void effects(Tile tile){