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 | 63 | ||||
| -rw-r--r-- | app/systems/death.rb | 2 | ||||
| -rw-r--r-- | app/systems/player_weapon.rb | 11 | ||||
| -rw-r--r-- | app/systems/render.rb | 3 | ||||
| -rw-r--r-- | app/systems/spawn_enemy.rb | 9 | ||||
| -rw-r--r-- | app/systems/start_game.rb | 41 | ||||
| -rw-r--r-- | app/systems/ui/score.rb | 7 |
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 |
