summaryrefslogtreecommitdiffhomepage
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/components/label.rb13
-rw-r--r--app/components/singleton_score.rb4
-rw-r--r--app/components/weapon.rb2
-rw-r--r--app/factories/bullet.rb2
-rw-r--r--app/factories/ships/sample_enemy.rb13
-rw-r--r--app/main.rb4
-rw-r--r--app/scenes/scenes.rb2
-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
-rw-r--r--app/tick.rb8
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