summaryrefslogtreecommitdiffhomepage
path: root/run.rb
blob: 4e3a0804b07619cadc589d9fac90a878a5f294e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
require 'ruby2d'
require 'ruby2d/camera'
require 'felflame'

# configuration for the simulation
# change values here to see a change in the simulation
FF::Cmp.new('SingletonConfig',
            # Show vectors
            debug: true,

            # If the camera should follow the "center mass"
            follow: false,

            # The velocity limit of a boid
            # Set to negative to disable
            limit: 6.0,

            # How strong the bounds should be
            # Higher is stronger
            bounds_strength: 1.0,
            # What the bounds are
            xmax: 480.0, xmin: -580.0,
            ymax: 250.0, ymin: -340.0,

            # How much the boids try to pull together
            # Smaller is stronger
            cohesion: 6000.0,

            # How much the boids push away from eachother
            # Smaller is stronger
            seperation: 375.0, 
            # What the range of seperating should be
            seperation_distance: 150.0,

            # How strong their vector alignment should be
            # Smaller is stronger
            alignment: 1000.0,

            # How much they try to follow their target(your mouse cursor)
            # Smaller is stronger
            target_strength: 2500.0,

            # These are later set by the mouse position
            target_x: 0, target_y: 0)
$config = FF::Cmp::SingletonConfig.new

# Used by the Camera Library
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
    7.times do
      Fish.create(randspot.sample.to_f, randspot.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
      end
    end
  end

  def update
    $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]
    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.zoom *= 1.1 if key_held('z')
    Camera.zoom /= 1.1 if key_held('x')
  end

  def render
  end
end


gamewindow = GameWindow.new
gamewindow.set(title: get(:title), width: get(:width), height: get(:height), resizable: get(:resizable))
gamewindow.show