summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2021-12-26 21:42:56 -0500
committerrealtradam <[email protected]>2021-12-26 21:42:56 -0500
commit5f8a4b6b17d6ada0097412b13605717dd5a310df (patch)
treecd3646042537e6c9e69ff2c31c99b816607acce7
parent70b2499a8753331b68fb7a61a8882c9ff0b017d8 (diff)
downloadSteelWings-5f8a4b6b17d6ada0097412b13605717dd5a310df.tar.gz
SteelWings-5f8a4b6b17d6ada0097412b13605717dd5a310df.zip
added rate of fire, tweaked ai
-rw-r--r--app/components/weapon.rb2
-rw-r--r--app/factories/bullet.rb2
-rw-r--r--app/factories/ships/sample_enemy.rb12
-rw-r--r--app/systems/ai/randomize_ai.rb4
-rw-r--r--app/systems/ai/rejoin.rb1
-rw-r--r--app/systems/ai/scatter.rb3
-rw-r--r--app/systems/ai/target_player.rb5
-rw-r--r--app/systems/player_weapon.rb10
-rw-r--r--app/systems/start_game.rb13
-rw-r--r--app/tick.rb8
10 files changed, 34 insertions, 26 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..9355c2f 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.001,
+ 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/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..034fa28 100644
--- a/app/systems/ai/scatter.rb
+++ b/app/systems/ai/scatter.rb
@@ -5,7 +5,8 @@ FF::Sys.new("Scatter", priority: 40) do
# 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..5e5ac18 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.5)
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/start_game.rb b/app/systems/start_game.rb
index 4d6289e..9efbf14 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]
+ 20.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),
)
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