summaryrefslogtreecommitdiffhomepage
path: root/app/systems
diff options
context:
space:
mode:
Diffstat (limited to 'app/systems')
-rw-r--r--app/systems/ai/randomize_ai.rb4
-rw-r--r--app/systems/ai/rejoin.rb1
-rw-r--r--app/systems/ai/scatter.rb7
-rw-r--r--app/systems/ai/target_player.rb5
-rw-r--r--app/systems/collision_damage.rb63
-rw-r--r--app/systems/death.rb2
-rw-r--r--app/systems/player_weapon.rb11
-rw-r--r--app/systems/render.rb3
-rw-r--r--app/systems/spawn_enemy.rb9
-rw-r--r--app/systems/start_game.rb41
-rw-r--r--app/systems/ui/score.rb7
11 files changed, 118 insertions, 35 deletions
diff --git a/app/systems/ai/randomize_ai.rb b/app/systems/ai/randomize_ai.rb
index f272181..b3ab59b 100644
--- a/app/systems/ai/randomize_ai.rb
+++ b/app/systems/ai/randomize_ai.rb
@@ -9,7 +9,7 @@ FF::Scn::BoidRules.add(
#puts 'remove pick'
end
FF::Cmp::BoidsSeparation.each do |sep|
- if rand < 0.3
+ if rand < 0.05
sep.entities[0].add random_ai_pick
#puts 'pick'
end
@@ -26,7 +26,7 @@ FF::Scn::BoidRules.add(
#puts 'target'
end
#timer.interval = (300..1200).to_a.sample
- timer.interval = 60
+ timer.interval = (5..20).to_a.sample
#puts timer.interval
timer.timer = 0
end
diff --git a/app/systems/ai/rejoin.rb b/app/systems/ai/rejoin.rb
index 9e06eb7..bc804de 100644
--- a/app/systems/ai/rejoin.rb
+++ b/app/systems/ai/rejoin.rb
@@ -2,6 +2,7 @@ FF::Sys.new("Rejoin", priority: 40) do
FF::Cmp::SingletonRandomAIPick[0].entities.each do |entity|
sep = entity.components[FF::Cmp::BoidsSeparation][0]
sep.distance = Factory::SampleEnemy.defaults[:boids_seperation_distance]
+ sep.strength = Factory::SampleEnemy.defaults[:boids_seperation_strength]
alignment_mgr = entity.components[FF::Cmp::BoidsAlignment]
cohesion_mgr = entity.components[FF::Cmp::BoidsCohesion]
if alignment_mgr.nil? || alignment_mgr.empty?
diff --git a/app/systems/ai/scatter.rb b/app/systems/ai/scatter.rb
index 82bcb65..1b51061 100644
--- a/app/systems/ai/scatter.rb
+++ b/app/systems/ai/scatter.rb
@@ -1,11 +1,8 @@
FF::Sys.new("Scatter", priority: 40) do
FF::Cmp::SingletonRandomAIPick[0].entities.each do |entity|
sep = entity.components[FF::Cmp::BoidsSeparation][0]
- # I did times 3 becase then it will always be greater then
- # what it was before and that means it will force a
- # seperation to happen even if the default value is
- # changed and you forget to update this number here
- sep.distance = Factory::SampleEnemy.defaults[:boids_seperation_distance] * 3
+ sep.distance = Factory::SampleEnemy.defaults[:boids_seperation_distance] * 10
+ sep.strength = Factory::SampleEnemy.defaults[:boids_seperation_strength]
#puts 'remove align/cohesion/follow'.upcase
alignment_mgr = entity.components[FF::Cmp::BoidsAlignment]
cohesion_mgr = entity.components[FF::Cmp::BoidsCohesion]
diff --git a/app/systems/ai/target_player.rb b/app/systems/ai/target_player.rb
index 1e4a3ea..bf8b9e8 100644
--- a/app/systems/ai/target_player.rb
+++ b/app/systems/ai/target_player.rb
@@ -1,11 +1,12 @@
FF::Sys.new("TargetPlayer", priority: 40) do
FF::Cmp::SingletonRandomAIPick[0].entities.each do |entity|
sep = entity.components[FF::Cmp::BoidsSeparation][0]
- sep.distance = 200
+ sep.distance = Factory::SampleEnemy.defaults[:boids_seperation_distance]
+ sep.strength = Factory::SampleEnemy.defaults[:boids_seperation_strength]
follow_mgr = entity.components[FF::Cmp::Follow]
player_boid = FF::Cmp::SingletonPlayer[0].entities[0].components[FF::Cmp::Boid][0]
if follow_mgr.nil? || follow_mgr.empty?
- entity.add FF::Cmp::Follow.new(target: player_boid, strength: 1.2)
+ entity.add FF::Cmp::Follow.new(target: player_boid, strength: 0.6)
end
end
end
diff --git a/app/systems/collision_damage.rb b/app/systems/collision_damage.rb
index cc052bd..676589d 100644
--- a/app/systems/collision_damage.rb
+++ b/app/systems/collision_damage.rb
@@ -1,20 +1,55 @@
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
- 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)
- puts 'checks here'.upcase
- puts 'hp dont exist' if hitcircle_target.entities[0].components[FF::Cmp::Hp].nil?
- puts 'collision damage dont exist' if hitcircle_target.entities[0].components[FF::Cmp::CollisionDamage].nil?
- puts 'checks end'.upcase
- hitcircle_target.entities[0].components[FF::Cmp::Hp][0].health -= hitcircle_self.entities[0].components[FF::Cmp::CollisionDamage][0].damage
+ FF::Sys.new("CollisionDamage", priority: 98) do
+
+ FF::Cmp::SingletonEnemyTeam[0].entities.each do |enemy_entity|
+ sprite = enemy_entity.components[FF::Cmp::Sprite][0].props
+ if (sprite[:x] < 1312) && (sprite[:x] > -32) && (sprite[:y] < 752) && (sprite[:y] > -32)
+ hitcircle_self = enemy_entity.components[FF::Cmp::Hitcircle][0]
+ boid_self = hitcircle_self.entities[0].components[FF::Cmp::Boid][0]
+ FF::Cmp::SingletonBullet[0].entities.each do |bullet_entity|
+ hitcircle_target = bullet_entity.components[FF::Cmp::Hitcircle][0]
+ 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)
+ #puts 'checks here'.upcase
+ #puts 'hp dont exist' if hitcircle_target.entities[0].components[FF::Cmp::Hp].nil?
+ #puts 'collision damage dont exist' if hitcircle_target.entities[0].components[FF::Cmp::CollisionDamage].nil?
+ #puts 'checks end'.upcase
+ hitcircle_target.entities[0].components[FF::Cmp::Hp][0].health -= hitcircle_self.entities[0].components[FF::Cmp::CollisionDamage][0].damage
+ hitcircle_self.entities[0].components[FF::Cmp::Hp][0].health -= hitcircle_target.entities[0].components[FF::Cmp::CollisionDamage][0].damage
+ end
+
+ end
+
+ player = FF::Cmp::SingletonPlayer[0].entities[0]
+ unless player.nil?
+ hitcircle_target = player.components[FF::Cmp::Hitcircle][0]
+ 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
+ hitcircle_self.entities[0].components[FF::Cmp::Hp][0].health -= hitcircle_target.entities[0].components[FF::Cmp::CollisionDamage][0].damage
+ end
end
end
end
end
)
+=begin
+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
+ 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)
+ puts 'checks here'.upcase
+ puts 'hp dont exist' if hitcircle_target.entities[0].components[FF::Cmp::Hp].nil?
+ puts 'collision damage dont exist' if hitcircle_target.entities[0].components[FF::Cmp::CollisionDamage].nil?
+ puts 'checks end'.upcase
+ hitcircle_target.entities[0].components[FF::Cmp::Hp][0].health -= hitcircle_self.entities[0].components[FF::Cmp::CollisionDamage][0].damage
+ end
+ end
+end
+end
+)
+=end
diff --git a/app/systems/death.rb b/app/systems/death.rb
index edeb493..ae02dec 100644
--- a/app/systems/death.rb
+++ b/app/systems/death.rb
@@ -5,6 +5,8 @@ FF::Scn::BoidRules.add(
hp.entities[0].components.each do |manager, manager_array|
if manager.equal?(FF::Cmp::SingletonPlayer)
FF::Sys::EndGame.call
+ elsif manager.equal?(FF::Cmp::SingletonEnemyTeam)
+ FF::Sys::Score.call
end
next if manager.equal?(FF::Cmp::Hp)
manager_array.reverse_each do |component|
diff --git a/app/systems/player_weapon.rb b/app/systems/player_weapon.rb
index 2ecd250..e16570c 100644
--- a/app/systems/player_weapon.rb
+++ b/app/systems/player_weapon.rb
@@ -1,16 +1,19 @@
FF::Scn::BoidRules.add(
FF::Sys.new('PlayerWeapon') do
- if $gtk.args.inputs.mouse.down
- player = FF::Cmp::SingletonPlayer[0].entities[0]
- unless player.nil?
+ player = FF::Cmp::SingletonPlayer[0].entities[0]
+ unless player.nil?
+ weapon = player.components[FF::Cmp::Weapon][0]
+ weapon.cooldown -= 1 unless weapon.cooldown <= 0
+ if $gtk.args.inputs.mouse.button_left
boid = player.components[FF::Cmp::Boid][0]
- weapon = player.components[FF::Cmp::Weapon][0]
if player.components[FF::Cmp::Weapon][0].cooldown <= 0
+ weapon.cooldown += weapon.cooldown_max
# 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'))
+ $gtk.args.gtk.queue_sound "sounds/shoot.mp3"
end
end
end
diff --git a/app/systems/render.rb b/app/systems/render.rb
index 4bd117c..a067613 100644
--- a/app/systems/render.rb
+++ b/app/systems/render.rb
@@ -3,5 +3,8 @@ FF::Scn::Render.add(
FF::Cmp::Sprite.each do |sprite|
$gtk.args.outputs.sprites << sprite.props
end
+ FF::Cmp::Label.each do |label|
+ $gtk.args.outputs.labels << label.props
+ end
end
)
diff --git a/app/systems/spawn_enemy.rb b/app/systems/spawn_enemy.rb
new file mode 100644
index 0000000..6bb2253
--- /dev/null
+++ b/app/systems/spawn_enemy.rb
@@ -0,0 +1,9 @@
+FF::Scn::BoidRules.add(
+ FF::Sys.new("SpawnEnemy", priority: 500) do
+ while FF::Cmp::SingletonEnemyTeam[0].entities.length < 16
+ position_range = ((1280*2.5).to_i..(1280*3)).to_a
+ posneg = [1,-1]
+ Factory::SampleEnemy.new(x: position_range.sample * posneg.sample, y: position_range.sample * posneg.sample)
+ end
+ end
+)
diff --git a/app/systems/start_game.rb b/app/systems/start_game.rb
index 4d6289e..e2e5501 100644
--- a/app/systems/start_game.rb
+++ b/app/systems/start_game.rb
@@ -18,7 +18,7 @@ FF::Sys.new('StartGame', priority: 50 ) do
{x: 700, y: 200},
{x: 150, y: 250},
]
- position_range = (500..1000).to_a
+ position_range = (400..(1280*2)).to_a
sprite = FF::Cmp::Sprite.new
sprite.props[:path] = 'sprites/background.png'
@@ -27,8 +27,9 @@ FF::Sys.new('StartGame', priority: 50 ) do
FF::Cmp::SingletonCamera[0],
FF::Cmp::Boid.new(h: 1920 * 2, w: 1920 * 2)
)
- 8.times do |pos|
- Factory::SampleEnemy.new(x: position_range.sample, y: position_range.sample)
+ posneg = [1,-1]
+ 16.times do |pos|
+ Factory::SampleEnemy.new(x: position_range.sample * posneg.sample, y: position_range.sample * posneg.sample)
end
sprite = FF::Cmp::Sprite.new
@@ -44,26 +45,50 @@ FF::Sys.new('StartGame', priority: 50 ) do
debug_arrow,
FF::Cmp::SingletonCamera[0],
FF::Cmp::SingletonMoveCamera[0],
- FF::Cmp::BoidBounds.new,
+ FF::Cmp::BoidBounds.new(strength: 3),
FF::Cmp::Follow.new(target: :mouse, strength: 0.007),
FF::Cmp::SingletonPlayer[0],
FF::Cmp::Team.new(team: 'player'),
FF::Cmp::Weapon.new,
FF::Cmp::BoidMinimumSpeed.new(speed: 5),
FF::Cmp::DecaySpeed.new(strength: 0.8),
- FF::Cmp::Hp.new(health: 100),
+ FF::Cmp::Hp.new(health: 300),
FF::Cmp::CollisionDamage.new(damage: 100),
- FF::Cmp::Hitcircle.new(r: 32),
+ FF::Cmp::Hitcircle.new(r: 16),
)
-
+ score_label_shadow = FF::Cmp::Label.new
+ score_label_shadow.props.merge!({
+ x: 50,
+ y: 667,
+ text: '0',
+ size_enum: 8,
+ r: 100,
+ g: 100,
+ b: 100,
+ font: 'fonts/kenvector_future_thin.ttf',
+ })
+ score_label = FF::Cmp::Label.new
+ score_label.props.merge!({
+ x: 50,
+ y: 670,
+ text: '0',
+ size_enum: 8,
+ font: 'fonts/kenvector_future_thin.ttf',
+ })
+ score = FF::Cmp::SingletonScore[0]
+ score.score = 0
+ FF::Ent.new(
+ score_label,
+ score_label_shadow,
+ score,
+ )
FF::Stg.add(
FF::Scn::BoidRules,
FF::Scn::Camera,
FF::Scn::Cleanup,
)
-
FF::Scn::Debug.add(FF::Sys::DebugRenderVectorArrow)
@pause = false
#FF::Stg.remove FF::Scn::BoidRules
diff --git a/app/systems/ui/score.rb b/app/systems/ui/score.rb
new file mode 100644
index 0000000..c761561
--- /dev/null
+++ b/app/systems/ui/score.rb
@@ -0,0 +1,7 @@
+FF::Sys.new("Score", priority: 50) do
+ score = FF::Cmp::SingletonScore[0]
+ score.score += 100
+ score.entities[0].components[FF::Cmp::Label].each do |label|
+ label.props[:text] = score.score.to_s
+ end
+end