summaryrefslogtreecommitdiffhomepage
path: root/run.rb
blob: e21f723b64ab9eac7a9a26ae9821a14940b7729c (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
require 'ruby2d'
require 'ruby2d/camera'
require 'felflame'
# If Camera should follow center mass
$follow = false

# Values that can tune strength of certain rules
# Lower is stronger
$cohesion = 3000.0
$seperation = 75.0
$seperation_distance = 125.0
$alignment = 1000.0
$target_strength = 2500.0

# The velocity limit of a boid
# Set to negative to remove limit
$limit = 12.0

# These are changed later by mouse position
$x_target = 0.0
$y_target = 0.0

FF::Cmp.new('SingletonConfig',
            debug: false,
            bounds_strength: 2.0,
            xmax: 480.0, xmin: -580.0,
            ymax: 250.0, ymin: -340.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
    6.times do
      FF::Ent.new(
        FF::Cmp::Boids.new(x: randspot.sample.to_f, y: randspot.sample.to_f),
        FF::Cmp::BoidVisuals.new(
          obj: Camera::Image.new(
            'assets/Guppy Large Normal.png',
            width: 45, height: 46
            #obj: Camera::Circle.new(
            #  color: [0.86,0.57,0.96,1],
            #  radius: 7,
            #  sectors: 10
          ),
          vect: Camera::Line.new(
            width: 7,
            color: [1.0,0,0,0.5],
            z: -1
          )
        )
      )
    end
    unless $config.debug
      FF::Cmp::BoidVisuals.each do |boid|
        boid.vect.remove
      end
    end
  end

  def update
    $x_target = Camera.coordinate_to_worldspace(get(:mouse_x), get(:mouse_y))[0]
    $y_target = 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')
    if key_held('space')
      FF::Scn::BoidCalculations.call 
    end
  end

  def render
  end
end


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