diff options
Diffstat (limited to 'app')
| -rw-r--r-- | app/components/label.rb | 13 | ||||
| -rw-r--r-- | app/components/singleton_score.rb | 4 | ||||
| -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 | 13 | ||||
| -rw-r--r-- | app/main.rb | 4 | ||||
| -rw-r--r-- | app/scenes/scenes.rb | 2 | ||||
| -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 | ||||
| -rw-r--r-- | app/tick.rb | 8 |
19 files changed, 154 insertions, 47 deletions
diff --git a/app/components/label.rb b/app/components/label.rb new file mode 100644 index 0000000..25b5529 --- /dev/null +++ b/app/components/label.rb @@ -0,0 +1,13 @@ +FF::Cmp.new("Label", props: { + x: 0, + y: 0, + text: 'label', + size_enum: 2, + alignment_enum: 1, + r: 255, + g: 255, + b: 255, + a: 255, + font: "font.ttf", + vertical_alignment_enum: 0 +}) diff --git a/app/components/singleton_score.rb b/app/components/singleton_score.rb new file mode 100644 index 0000000..4f6514b --- /dev/null +++ b/app/components/singleton_score.rb @@ -0,0 +1,4 @@ +FF::Cmp.new('SingletonScore', + score: 0, + singleton: true) +FF::Cmp::SingletonScore.new 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 a2a3a21..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) @@ -41,6 +41,7 @@ class Factory FF::Cmp::Team.new, FF::Cmp::SingletonDebugVectorArrow[0], FF::Cmp::SingletonCamera[0], + FF::Cmp::SingletonEnemyTeam[0], ) end end diff --git a/app/main.rb b/app/main.rb index 5f59b42..28ce373 100644 --- a/app/main.rb +++ b/app/main.rb @@ -29,8 +29,11 @@ require 'app/components/teams/team.rb' require 'app/components/singleton_title.rb' require 'app/components/singleton_ai_timer.rb' require 'app/components/singleton_random_ai_pick.rb' +require 'app/components/label.rb' +require 'app/components/singleton_score.rb' +require 'app/systems/ui/score.rb' require 'app/systems/init_title_screen.rb' require 'app/systems/ui/button.rb' require 'app/systems/ui/return_to_menu.rb' @@ -58,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/scenes/scenes.rb b/app/scenes/scenes.rb index f0cdf17..cd41c37 100644 --- a/app/scenes/scenes.rb +++ b/app/scenes/scenes.rb @@ -4,5 +4,5 @@ FF::Scn.new('Cleanup') FF::Stg.add( FF::Scn.new('UI'), FF::Scn.new('Render'), - FF::Scn.new('Debug') ) +FF::Scn.new('Debug') 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 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 |
