diff options
| author | _Tradam <[email protected]> | 2021-12-19 19:08:50 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-12-19 19:08:50 -0500 |
| commit | cd3d7be54f16263ceaa9b5e0e8a1c219821e8339 (patch) | |
| tree | 86014a919be2ee016472d9243a213c1c5659668d /app | |
| parent | c16f16066f1943a8c2d4178583578705e71e7794 (diff) | |
| parent | 844d8c194b48055ba60be4d185ad9ab688cce92a (diff) | |
| download | SteelWings-cd3d7be54f16263ceaa9b5e0e8a1c219821e8339.tar.gz SteelWings-cd3d7be54f16263ceaa9b5e0e8a1c219821e8339.zip | |
Merge pull request #3 from realtradam/dmg-dev
Bullets, Health, Collision systems implemented. Renamed plane sprites.
Diffstat (limited to 'app')
| -rw-r--r-- | app/components/hitcircle.rb | 3 | ||||
| -rw-r--r-- | app/components/stats/collision_damage.rb | 2 | ||||
| -rw-r--r-- | app/components/stats/hp.rb | 2 | ||||
| -rw-r--r-- | app/components/teams/enemy_team.rb | 1 | ||||
| -rw-r--r-- | app/components/teams/player_team.rb | 1 | ||||
| -rw-r--r-- | app/factories/bullet.rb | 17 | ||||
| -rw-r--r-- | app/factories/ships/osprey.rb | 22 | ||||
| -rw-r--r-- | app/main.rb | 8 | ||||
| -rw-r--r-- | app/systems/collision_damage.rb | 14 | ||||
| -rw-r--r-- | app/systems/death.rb | 20 | ||||
| -rw-r--r-- | app/systems/start_game.rb | 15 | ||||
| -rw-r--r-- | app/tick.rb | 5 |
12 files changed, 97 insertions, 13 deletions
diff --git a/app/components/hitcircle.rb b/app/components/hitcircle.rb new file mode 100644 index 0000000..7f60f01 --- /dev/null +++ b/app/components/hitcircle.rb @@ -0,0 +1,3 @@ +FF::Cmp.new('Hitcircle', + x: 0, y: 0, + r: 50) diff --git a/app/components/stats/collision_damage.rb b/app/components/stats/collision_damage.rb new file mode 100644 index 0000000..f915039 --- /dev/null +++ b/app/components/stats/collision_damage.rb @@ -0,0 +1,2 @@ +FF::Cmp.new('CollisionDamage', + damage: 10) diff --git a/app/components/stats/hp.rb b/app/components/stats/hp.rb new file mode 100644 index 0000000..1a6f996 --- /dev/null +++ b/app/components/stats/hp.rb @@ -0,0 +1,2 @@ +FF::Cmp.new('Hp', + health: 100) diff --git a/app/components/teams/enemy_team.rb b/app/components/teams/enemy_team.rb new file mode 100644 index 0000000..9d4e0d1 --- /dev/null +++ b/app/components/teams/enemy_team.rb @@ -0,0 +1 @@ +FF::Cmp.new('EnemyTeam') diff --git a/app/components/teams/player_team.rb b/app/components/teams/player_team.rb new file mode 100644 index 0000000..6e1b126 --- /dev/null +++ b/app/components/teams/player_team.rb @@ -0,0 +1 @@ +FF::Cmp.new('PlayerTeam') diff --git a/app/factories/bullet.rb b/app/factories/bullet.rb new file mode 100644 index 0000000..160613c --- /dev/null +++ b/app/factories/bullet.rb @@ -0,0 +1,17 @@ +class Factory + class Bullet + def self.new(damage: 10, x:, y:) + puts 'new ent created' + sprite = FF::Cmp::Sprite.new + sprite.props[:path] = 'sprites/kenny/Tiles/tile_0000.png' + FF::Ent.new( + sprite, + FF::Cmp::Boid.new(x: x, y: y, vx: 10, w: 16, h: 16), + FF::Cmp::SingletonCamera[0], + FF::Cmp::Hitcircle.new(r: 10), + FF::Cmp::Hp.new(health: 1), + FF::Cmp::CollisionDamage.new(damage: damage), + ) + end + end +end diff --git a/app/factories/ships/osprey.rb b/app/factories/ships/osprey.rb new file mode 100644 index 0000000..1f57cb1 --- /dev/null +++ b/app/factories/ships/osprey.rb @@ -0,0 +1,22 @@ +class Factory + class Osprey + def self.new(x: x, y: y) + sprite = FF::Cmp::Sprite.new + sprite.props[:path] = 'sprites/kenny/Ships/Osprey.png' + FF::Ent.new( + FF::Cmp::Boid.new(x: x, y: y, vx: 25, vy: 25, w: 32, h: 32), + sprite, + FF::Cmp::BoidBounds.new(strength: 0.6), + FF::Cmp::BoidsAlignment.new(strength: 1), + FF::Cmp::BoidsSeparation.new(distance: 150, strength: 0.001), + FF::Cmp::BoidsCohesion.new(strength: 10000), + FF::Cmp::Hp.new(health: 100), + FF::Cmp::CollisionDamage.new(damage: 100), + FF::Cmp::Hitcircle.new(r: 12), + FF::Cmp::DebugVectorArrow[0], + FF::Cmp::SingletonCamera[0], + ) + end + end +end + diff --git a/app/main.rb b/app/main.rb index 12cd6dd..f5cc908 100644 --- a/app/main.rb +++ b/app/main.rb @@ -13,6 +13,9 @@ require 'app/components/rules/separation.rb' require 'app/components/rules/follow.rb' require 'app/components/debug/debug_vector_arrow.rb' require 'app/components/camera.rb' +require 'app/components/stats/collision_damage.rb' +require 'app/components/stats/hp.rb' +require 'app/components/hitcircle.rb' require 'app/systems/init_title_screen.rb' require 'app/systems/title_screen.rb' @@ -28,5 +31,10 @@ require 'app/systems/rules/reset_change_vector.rb' require 'app/systems/rules/follow.rb' require 'app/systems/debug/debug_render_vector_arrow.rb' require 'app/systems/camera.rb' +require 'app/systems/collision_damage.rb' +require 'app/systems/death.rb' + +require 'app/factories/bullet.rb' +require 'app/factories/ships/osprey.rb' require 'app/tick.rb' diff --git a/app/systems/collision_damage.rb b/app/systems/collision_damage.rb new file mode 100644 index 0000000..9e47c0c --- /dev/null +++ b/app/systems/collision_damage.rb @@ -0,0 +1,14 @@ +FF::Scn::BoidRules.add( + FF::Sys.new("CollisionDamage", priority: 65) do + FF::Cmp::Hitcircle.each do |hitcircle_self| + boid_self = hitcircle_self.entities[0].components[FF::Cmp::Boid][0] + FF::Cmp::Hitcircle.each do |hitcircle_target| + next if hitcircle_self == hitcircle_target + boid_target = hitcircle_target.entities[0].components[FF::Cmp::Boid][0] + if Math.sqrt(((boid_self.x - boid_target.x) ** 2) + ((boid_self.y - boid_target.y) ** 2)) < (hitcircle_target.r + hitcircle_self.r) + hitcircle_target.entities[0].components[FF::Cmp::Hp][0].health -= hitcircle_self.entities[0].components[FF::Cmp::CollisionDamage][0].damage + end + end + end + end +) diff --git a/app/systems/death.rb b/app/systems/death.rb new file mode 100644 index 0000000..d9cd792 --- /dev/null +++ b/app/systems/death.rb @@ -0,0 +1,20 @@ +FF::Scn::BoidRules.add( + FF::Sys.new("Death", priority: 200) do + FF::Cmp::Hp.each do |hp| + if hp.health <= 0 + component_hash = hp.entities[0].components.clone + component_hash.each_pair do |manager, manager_array| + next if manager.equal?(FF::Cmp::SingletonCamera) + next if manager.equal?(FF::Cmp::Hp) + next if manager.equal?(FF::Cmp::DebugVectorArrow) + manager_array.each do |component| + # unless singleton + component.delete + end + end + hp.entities[0].delete + hp.delete + end + end + end +) diff --git a/app/systems/start_game.rb b/app/systems/start_game.rb index b71086e..39cc63c 100644 --- a/app/systems/start_game.rb +++ b/app/systems/start_game.rb @@ -17,19 +17,8 @@ FF::Sys.new('StartGame', priority: 50 ) do ] position_range = (100..700).to_a - 25.times do |pos| - sprite = FF::Cmp::Sprite.new - sprite.props[:path] = 'sprites/kenny/Ships/ship_0011.png' - FF::Ent.new( - FF::Cmp::Boid.new(x: position_range.sample, y: position_range.sample, vx: 25, vy: 25, w: sprite.props[:w], h: sprite.props[:h]), - sprite, - FF::Cmp::BoidBounds.new(strength: 1), - FF::Cmp::BoidsAlignment.new(strength: 1), - FF::Cmp::BoidsSeparation.new(distance: 150, strength: 0.01), - FF::Cmp::BoidsCohesion.new(strength: 100), - debug_arrow, - FF::Cmp::SingletonCamera[0], - ) + 5.times do |pos| + Factory::Osprey.new(x: position_range.sample, y: position_range.sample) end sprite = FF::Cmp::Sprite.new diff --git a/app/tick.rb b/app/tick.rb index c8c8f83..1205fd6 100644 --- a/app/tick.rb +++ b/app/tick.rb @@ -10,6 +10,11 @@ def tick args args.outputs.background_color = [0,0,0] FelFlame::Stage.call + # Spawn Bullet + if args.inputs.keyboard.keys[:down].include?(:b) + Factory::Bullet.new(x: @camera.x, y: @camera.y) + end + # Moving Camera if args.inputs.keyboard.keys[:down_or_held].include?(:d) @camera.x += (Math.cos([email protected] * (Math::PI / 180.0)) * 5) |
