summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--app/components/singleton_camera.rb4
-rw-r--r--app/components/teams/singleton_player_team.rb4
-rw-r--r--app/components/teams/team.rb2
-rw-r--r--app/components/weapon.rb5
-rw-r--r--app/factories/bullet.rb5
-rw-r--r--app/factories/ships/osprey.rb3
-rw-r--r--app/main.rb4
-rw-r--r--app/systems/collision_damage.rb2
-rw-r--r--app/systems/player_weapon.rb16
-rw-r--r--app/systems/start_game.rb5
10 files changed, 42 insertions, 8 deletions
diff --git a/app/components/singleton_camera.rb b/app/components/singleton_camera.rb
index 6d072c1..61223d4 100644
--- a/app/components/singleton_camera.rb
+++ b/app/components/singleton_camera.rb
@@ -1,6 +1,6 @@
FF::Cmp.new('SingletonCamera',
- singleton: true,
:x, :y,
- :zoom, :angle)
+ :zoom, :angle,
+ singleton: true)
FF::Cmp::SingletonCamera.new(x: 0.0, y: 0.0, zoom: 1.0, angle: 0.0)
diff --git a/app/components/teams/singleton_player_team.rb b/app/components/teams/singleton_player_team.rb
index 22c68ee..1a75a78 100644
--- a/app/components/teams/singleton_player_team.rb
+++ b/app/components/teams/singleton_player_team.rb
@@ -1,3 +1,3 @@
-FF::Cmp.new('SingletonPlayerTeam',
+FF::Cmp.new('SingletonPlayer',
singleton: true)
-FF::Cmp::SingletonPlayerTeam.new
+FF::Cmp::SingletonPlayer.new
diff --git a/app/components/teams/team.rb b/app/components/teams/team.rb
new file mode 100644
index 0000000..da0ae3e
--- /dev/null
+++ b/app/components/teams/team.rb
@@ -0,0 +1,2 @@
+FF::Cmp.new('Team',
+ team: 'enemy')
diff --git a/app/components/weapon.rb b/app/components/weapon.rb
new file mode 100644
index 0000000..bb7becd
--- /dev/null
+++ b/app/components/weapon.rb
@@ -0,0 +1,5 @@
+FF::Cmp.new('Weapon',
+ damage: 35,
+ cooldown: 0,
+ cooldown_max: 15,
+ speed: 20)
diff --git a/app/factories/bullet.rb b/app/factories/bullet.rb
index 160613c..50a68c0 100644
--- a/app/factories/bullet.rb
+++ b/app/factories/bullet.rb
@@ -1,15 +1,16 @@
class Factory
class Bullet
- def self.new(damage: 10, x:, y:)
+ def self.new(x:, y:, damage: 10, vx: 10, vy: 0)
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::Boid.new(x: x, y: y, vx: vx, vy: vy, w: 16, h: 16),
FF::Cmp::SingletonCamera[0],
FF::Cmp::Hitcircle.new(r: 10),
FF::Cmp::Hp.new(health: 1),
+ FF::Cmp::Team.new,
FF::Cmp::CollisionDamage.new(damage: damage),
)
end
diff --git a/app/factories/ships/osprey.rb b/app/factories/ships/osprey.rb
index 4dd5874..ff8cd19 100644
--- a/app/factories/ships/osprey.rb
+++ b/app/factories/ships/osprey.rb
@@ -4,7 +4,7 @@ class Factory
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),
+ FF::Cmp::Boid.new(x: x, y: y, vx: 0, vy: 0, w: 32, h: 32),
sprite,
FF::Cmp::BoidBounds.new(strength: 0.6),
FF::Cmp::BoidsAlignment.new(strength: 1),
@@ -13,6 +13,7 @@ class Factory
FF::Cmp::Hp.new(health: 100),
FF::Cmp::CollisionDamage.new(damage: 100),
FF::Cmp::Hitcircle.new(r: 12),
+ FF::Cmp::Team.new,
FF::Cmp::SingletonDebugVectorArrow[0],
FF::Cmp::SingletonCamera[0],
)
diff --git a/app/main.rb b/app/main.rb
index 9056d53..a5a1c5c 100644
--- a/app/main.rb
+++ b/app/main.rb
@@ -18,6 +18,9 @@ require 'app/components/stats/hp.rb'
require 'app/components/hitcircle.rb'
require 'app/components/teams/singleton_player_team.rb'
require 'app/components/teams/singleton_enemy_team.rb'
+require 'app/components/weapon.rb'
+require 'app/components/teams/team.rb'
+
require 'app/systems/init_title_screen.rb'
require 'app/systems/title_screen.rb'
@@ -35,6 +38,7 @@ 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/systems/player_weapon.rb'
require 'app/factories/bullet.rb'
require 'app/factories/ships/osprey.rb'
diff --git a/app/systems/collision_damage.rb b/app/systems/collision_damage.rb
index 9e47c0c..7ed0216 100644
--- a/app/systems/collision_damage.rb
+++ b/app/systems/collision_damage.rb
@@ -4,6 +4,8 @@ FF::Scn::BoidRules.add(
boid_self = hitcircle_self.entities[0].components[FF::Cmp::Boid][0]
FF::Cmp::Hitcircle.each do |hitcircle_target|
next if hitcircle_self == hitcircle_target
+ next if hitcircle_self.entities[0].components[FF::Cmp::Team][0].team == hitcircle_target.entities[0].components[FF::Cmp::Team][0].team
+ puts 'passed first check'
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
diff --git a/app/systems/player_weapon.rb b/app/systems/player_weapon.rb
new file mode 100644
index 0000000..02a50ec
--- /dev/null
+++ b/app/systems/player_weapon.rb
@@ -0,0 +1,16 @@
+FF::Scn::BoidRules.add(
+ FF::Sys.new('PlayerWeapon') do
+ if $gtk.args.inputs.mouse.down
+ player = FF::Cmp::SingletonPlayer[0].entities[0]
+ boid = player.components[FF::Cmp::Boid][0]
+ weapon = player.components[FF::Cmp::Weapon][0]
+ if player.components[FF::Cmp::Weapon][0].cooldown <= 0
+ # spawn bullet facing correct angle
+ mag = Math.sqrt((boid.vx ** 2) + (boid.vy ** 2))
+ bullet = Factory::Bullet.new(damage: weapon.damage, vx: (boid.vx/mag) * weapon.speed, vy: (boid.vy/mag) * weapon.speed, x: boid.x, y: boid.y)
+ bullet.remove(bullet.components[FF::Cmp::Team][0])
+ bullet.add(FF::Cmp::Team.new(team: 'player'))
+ end
+ end
+ end
+)
diff --git a/app/systems/start_game.rb b/app/systems/start_game.rb
index dd39ab4..42a3916 100644
--- a/app/systems/start_game.rb
+++ b/app/systems/start_game.rb
@@ -32,7 +32,10 @@ FF::Sys.new('StartGame', priority: 50 ) do
sprite,
debug_arrow,
FF::Cmp::SingletonCamera[0],
- FF::Cmp::Follow.new(target: :mouse, strength: 500)
+ FF::Cmp::Follow.new(target: :mouse, strength: 500),
+ FF::Cmp::SingletonPlayer[0],
+ FF::Cmp::Team.new(team: 'player'),
+ FF::Cmp::Weapon.new,
)
FF::Stg.add(