diff options
Diffstat (limited to 'app/systems')
| -rw-r--r-- | app/systems/ai/randomize_ai.rb | 4 | ||||
| -rw-r--r-- | app/systems/ai/rejoin.rb | 1 | ||||
| -rw-r--r-- | app/systems/ai/scatter.rb | 7 | ||||
| -rw-r--r-- | app/systems/ai/target_player.rb | 5 | ||||
| -rw-r--r-- | app/systems/collision_damage.rb | 47 | ||||
| -rw-r--r-- | app/systems/player_weapon.rb | 10 | ||||
| -rw-r--r-- | app/systems/spawn_enemy.rb | 9 | ||||
| -rw-r--r-- | app/systems/start_game.rb | 13 |
8 files changed, 55 insertions, 41 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 df2e050..676589d 100644 --- a/app/systems/collision_damage.rb +++ b/app/systems/collision_damage.rb @@ -1,30 +1,33 @@ FF::Scn::BoidRules.add( - FF::Sys.new("CollisionDamage", priority: 65) do + FF::Sys.new("CollisionDamage", priority: 98) do FF::Cmp::SingletonEnemyTeam[0].entities.each do |enemy_entity| - 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 + 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 + 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 + 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 diff --git a/app/systems/player_weapon.rb b/app/systems/player_weapon.rb index 2ecd250..9cb4df0 100644 --- a/app/systems/player_weapon.rb +++ b/app/systems/player_weapon.rb @@ -1,11 +1,13 @@ 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) 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 a0073bd..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,16 +45,16 @@ 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 |
