diff options
| -rw-r--r-- | app/components/weapon.rb | 2 | ||||
| -rw-r--r-- | app/factories/bullet.rb | 2 | ||||
| -rw-r--r-- | app/factories/ships/sample_enemy.rb | 12 | ||||
| -rw-r--r-- | app/main.rb | 1 | ||||
| -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 | ||||
| -rw-r--r-- | app/tick.rb | 8 |
13 files changed, 69 insertions, 52 deletions
diff --git a/app/components/weapon.rb b/app/components/weapon.rb index bb7becd..0c0963a 100644 --- a/app/components/weapon.rb +++ b/app/components/weapon.rb @@ -1,5 +1,5 @@ FF::Cmp.new('Weapon', damage: 35, cooldown: 0, - cooldown_max: 15, + cooldown_max: 7, speed: 20) diff --git a/app/factories/bullet.rb b/app/factories/bullet.rb index 1731999..39d3f3c 100644 --- a/app/factories/bullet.rb +++ b/app/factories/bullet.rb @@ -8,7 +8,7 @@ class Factory sprite, 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::Hitcircle.new(r: 20), FF::Cmp::Hp.new(health: 1), FF::Cmp::Team.new, FF::Cmp::CollisionDamage.new(damage: damage), diff --git a/app/factories/ships/sample_enemy.rb b/app/factories/ships/sample_enemy.rb index af8c4ca..6ebaef3 100644 --- a/app/factories/ships/sample_enemy.rb +++ b/app/factories/ships/sample_enemy.rb @@ -3,15 +3,15 @@ class Factory def self.defaults @defaults ||= { boid_bounds_strength: 0.6, - boids_alignment_strength: 0.005, - boids_seperation_strength: 0.005, - boids_seperation_distance: 50, - boids_cohesion_strength: 0.003, + boids_alignment_strength: 0.002, + boids_seperation_strength: 0.0005, + boids_seperation_distance: 150, + boids_cohesion_strength: 0.0005, hp_health: 100, collision_damage_damage: 100, hitcircle_r: 12, - boid_minimum_speed_speed: 5, - decay_speed_multiplier: 0.9, + boid_minimum_speed_speed: 7, + decay_speed_multiplier: 0.8, } end def self.new(x: 0, y: 0, vx: -3, vy: -3) diff --git a/app/main.rb b/app/main.rb index cd07f6e..28ce373 100644 --- a/app/main.rb +++ b/app/main.rb @@ -61,6 +61,7 @@ require 'app/systems/ai/scatter.rb' require 'app/systems/ai/rejoin.rb' require 'app/systems/ai/target_player.rb' require 'app/systems/ai/randomize_ai.rb' +require 'app/systems/spawn_enemy.rb' require 'app/factories/bullet.rb' require 'app/factories/ships/sample_enemy.rb' 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 diff --git a/app/tick.rb b/app/tick.rb index a48fce3..a7904bc 100644 --- a/app/tick.rb +++ b/app/tick.rb @@ -12,11 +12,12 @@ def tick args FelFlame::Stage.call # Spawn Bullet - if args.inputs.keyboard.keys[:down].include?(:b) - Factory::Bullet.new(x: @camera.x, y: @camera.y) - end + #if args.inputs.keyboard.keys[:down].include?(:b) + # Factory::Bullet.new(x: @camera.x, y: @camera.y) + #end # Moving Camera +=begin if args.inputs.keyboard.keys[:down_or_held].include?(:d) @camera.x += (Math.cos([email protected] * (Math::PI / 180.0)) * 5) @camera.y += (Math.sin([email protected] * (Math::PI / 180.0)) * 5) @@ -35,6 +36,7 @@ def tick args @camera.x -= (Math.sin([email protected] * (Math::PI / 180.0)) * -5) @camera.y += (Math.cos([email protected] * (Math::PI / 180.0)) * -5) end +=end if args.inputs.keyboard.keys[:down_or_held].include?(:q) @camera.angle += 3 end |
