From c34e1d372676709f4eb05237025c67b878bf76d6 Mon Sep 17 00:00:00 2001 From: realtradam Date: Tue, 10 Aug 2021 00:15:17 -0400 Subject: readme and cleanup --- run.rb | 100 +++++++++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 70 insertions(+), 30 deletions(-) (limited to 'run.rb') diff --git a/run.rb b/run.rb index e836681..fafaca3 100644 --- a/run.rb +++ b/run.rb @@ -1,7 +1,13 @@ require 'ruby2d' require 'ruby2d/camera' require 'felflame' - +module Ruby2D + class Window + def mouse_pry + @mouse_buttons_down + end + end +end # configuration for the simulation # change values here to see a change in the simulation FF::Cmp.new('SingletonConfig', @@ -17,28 +23,31 @@ FF::Cmp.new('SingletonConfig', # How strong the bounds should be # Higher is stronger - bounds_strength: 1.0, + bounds_strength: 10.0, # What the bounds are xmax: 450.0, xmin: -580.0, ymax: 250.0, ymin: -340.0, # How much the boids try to pull together # Smaller is stronger - cohesion: 6000.0, + cohesion: 10000.0, # How much the boids push away from eachother # Smaller is stronger - seperation: 60.0, + seperation: 115.0, # What the range of seperating should be - seperation_distance: 50.0, + seperation_distance: 70.0, + # Alignment rule disabled # How strong their vector alignment should be # Smaller is stronger alignment: 1000.0, # How much they try to follow their target - # Larger is strongzer - target_strength: 500.0, + # smaller is stronger + target_strength: 40.0, + # Radius that fish should avoid the piranha + target_fear: 150.0, # These are later set by the mouse position target_x: 0, target_y: 0) @@ -50,26 +59,33 @@ set(title: "Ruboids", width: 1164, height: 764, resizable: true) Dir[File.join(__dir__, 'lib/**', '*.rb')].sort.each { |file| require file } -# Comment out to remove a rule -FF::Scn::BoidCalculations.add FF::Sys::Cohesion -#FF::Scn::BoidCalculations.add FF::Sys::Alignment -FF::Scn::BoidCalculations.add FF::Sys::Seperation -FF::Scn::BoidCalculations.add FF::Sys::Target -FF::Scn::BoidCalculations.add FF::Sys::Bounds - -FF::Stg.add FF::Scn::BoidCalculations - class GameWindow < Ruby2D::Window def initialize super - Camera::Image.new('assets/Background.png', x: -get(:width)+57, y: -get(:height)+97, z: -99) - randspot = ((-get(:height) / 2)..(get(:height)/2)).to_a - 50.times do - Fish.create(randspot.sample.to_f, randspot.sample.to_f) + # Comment out to remove a rule + FF::Scn::BoidCalculations.add FF::Sys::Cohesion + #FF::Scn::BoidCalculations.add FF::Sys::Alignment + FF::Scn::BoidCalculations.add FF::Sys::Seperation + FF::Scn::BoidCalculations.add FF::Sys::Target + FF::Scn::BoidCalculations.add FF::Sys::Bounds + + FF::Stg.add FF::Scn::BoidCalculations + + # background + Camera::Image.new('assets/aquarium.png', x: -get(:width)+57, y: -get(:height)+97, z: -98) + + # stores array of valid positions on which to spawn + # (not actually valid but close enough) + randspot = [(($config.xmin.to_i)..($config.xmax.to_i)).to_a, (($config.ymin.to_i)..($config.ymax.to_i)).to_a] + + @mouse_right_held = false + @x_mouse_previous = get(:mouse_x) + @y_mouse_previous = get(:mouse_y) + + 70.times do + Fish.create(randspot[0].sample.to_f, randspot[1].sample.to_f) end - #2.times do - # Piranha.create(randspot.sample.to_f, randspot.sample.to_f) - #end + unless $config.debug FF::Cmp::BoidVisuals.each do |boid| boid.vect.remove @@ -78,22 +94,46 @@ class GameWindow < Ruby2D::Window end def update + if mouse_down(:right) + @mouse_right_held = true + elsif mouse_up(:right) + @mouse_right_held = false + end + + if @mouse_right_held && mouse_move + Camera.x += Camera.coordinate_to_worldspace(@x_mouse_previous, @y_mouse_previous)[0] - Camera.coordinate_to_worldspace(get(:mouse_x), get(:mouse_y))[0] + Camera.y += Camera.coordinate_to_worldspace(@x_mouse_previous, @y_mouse_previous)[1] - Camera.coordinate_to_worldspace(get(:mouse_x), get(:mouse_y))[1] + #Camera.y -= (@mouse_move_delta_y * 5) / Camera.zoom #Camera.coordinate_to_worldspace(@mouse_move_delta_y,0) + end + + if mouse_scroll + if @mouse_scroll_delta_y < 0 + Camera.zoom *= 1.1 + elsif @mouse_scroll_delta_y > 0 + Camera.zoom /= 1.1 + end + end + + @x_mouse_previous = get(:mouse_x) + @y_mouse_previous = get(:mouse_y) + $config.target_x = Camera.coordinate_to_worldspace(get(:mouse_x), get(:mouse_y))[0] $config.target_y = Camera.coordinate_to_worldspace(get(:mouse_y), get(:mouse_y))[1] - if key_down('space') - Piranha.create($config.target_x, $config.target_y) + if mouse_down(:left) + a = Piranha.create($config.target_x - 75, $config.target_y - 75) + a.components[FF::Cmp::BoidVisuals][0].vect.remove unless $config.debug end FF::Stage.call - Camera.y += 1 if key_held('s') - Camera.y -= 1 if key_held('w') - Camera.x += 1 if key_held('d') - Camera.x -= 1 if key_held('a') + Camera.y += 5 if key_held('s') + Camera.y -= 5 if key_held('w') + Camera.x += 5 if key_held('d') + Camera.x -= 5 if key_held('a') Camera.zoom *= 1.1 if key_held('z') Camera.zoom /= 1.1 if key_held('x') end def render - puts get(:fps) + #puts get(:fps) end end -- cgit v1.2.3