summaryrefslogtreecommitdiffhomepage
path: root/run.rb
blob: 66827eef90bd355aa9de0faaa7d09d274a62d03b (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
100
require 'ruby2d'
require_relative 'camera'
require_relative 'animator'

@background = Image.new('background.png')
@player =  Image.new('player.png')
@squares = []

# There is 2 ways you can add objects to be known and controlled by the camera, both do the same thing
Camera << @background
Camera.add @player

# This controls how fast the camera will follow an object
# it is not used by the .move_to or .move_by
Camera.elasticity = 10

# If you want to use a camera, you need all elements in the world to be known to it
# Exeptions would be things such as UI elements where you want them statically placed on the screen
(1..25).each do
  @squares << AnimatedSquare.new(x: (0..1920).to_a.sample, y: (0..1080).to_a.sample, size: (10..50).to_a.sample, color: 'random')
  Camera << @squares.last 
end


# How fast the player can move
@speed = 10

# Initializing
@x_move = 0
@y_move = 0
@cam_x_move = 0
@cam_y_move = 0
@is_follow = true

on :key do |event|
  if event.key == 'a'
    @x_move -= @speed
  end
  if event.key == 'd'
    @x_move += @speed
  end
  if event.key == 'w'
    @y_move -= @speed
  end
  if event.key == 's'
    @y_move += @speed
  end


  if event.key == 'j'
    @cam_x_move -= @speed
    @is_follow = false
  end
  if event.key == 'l'
    @cam_x_move += @speed
    @is_follow = false
  end
  if event.key == 'i'
    @cam_y_move -= @speed
    @is_follow = false
  end
  if event.key == 'k'
    @cam_y_move += @speed
    @is_follow = false
  end

  if event.key == 'f'
    @is_follow = true
  end
end

update do
  @player.x += @x_move
  @player.y += @y_move
  @x_move = 0
  @y_move = 0

  # Need to use the cameras position as an offset to keep the shapes range of movement working
  @squares.each do |square|
    square.update Camera.camera_position
  end
  

  if @is_follow
    Camera.follow @player
  else
    Camera.move_by(@cam_x_move,@cam_y_move)
  end

  
  # This function will teleport the camera directory to those coordinates
  # It is used by Camera.follow but you can use it yourself too!
  #Camera.move_to(50,50)
  @cam_x_move = 0
  @cam_y_move = 0

end

show