summaryrefslogtreecommitdiffhomepage
path: root/lib/camera/wrappers/square_wrapper.rb
blob: f828e0c00bf62231b5d2c72ec00ca28103fc06a9 (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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# frozen_string_literal: true

module Camera
# Wraps existing variables as well as adding new methods
# so that it can be handled by the Camera Module
  module SquareWrapped
    # Recalculates real coordiantes
    # Use after changing variables
    def update
      angle = Camera.angle * (Math::PI / 180)
      half_width = Window.width * 0.5
      half_height = Window.height * 0.5
      @x1 = (((x + x1 - Camera.x) * Math.cos(angle)) - ((y + y1 - Camera.y) * Math.sin(angle))) * Camera.zoom + half_width
      @y1 = (((x + x1 - Camera.x) * Math.sin(angle)) + ((y + y1 - Camera.y) * Math.cos(angle))) * Camera.zoom + half_height
      @x2 = (((x + x2 - Camera.x) * Math.cos(angle)) - ((y + y2 - Camera.y) * Math.sin(angle))) * Camera.zoom + half_width
      @y2 = (((x + x2 - Camera.x) * Math.sin(angle)) + ((y + y2 - Camera.y) * Math.cos(angle))) * Camera.zoom + half_height
      @x3 = (((x + x3 - Camera.x) * Math.cos(angle)) - ((y + y3 - Camera.y) * Math.sin(angle))) * Camera.zoom + half_width
      @y3 = (((x + x3 - Camera.x) * Math.sin(angle)) + ((y + y3 - Camera.y) * Math.cos(angle))) * Camera.zoom + half_height
      @x4 = (((x + x4 - Camera.x) * Math.cos(angle)) - ((y + y4 - Camera.y) * Math.sin(angle))) * Camera.zoom + half_width
      @y4 = (((x + x4 - Camera.x) * Math.sin(angle)) + ((y + y4 - Camera.y) * Math.cos(angle))) * Camera.zoom + half_height
    end

    #Methods for moving the shape
    def x
      @x ||= x1
    end

    def x=(x)
      @x = x
    end

    def y
      @y ||= y1
    end

    def y=(y)
      @y = y
    end

    # Wrappers for the coordinates so that
    # they are handled by the Camera instead
    # and for ease of programming
    def x1
      @virtual_x1 ||= @x1
    end

    def x1=(x1)
      @virtual_x1 = x1
    end

    def y1
      @virtual_y1 ||= @y1
    end

    def y1=(y1)
      @virtual_y1 = y1
    end

    def x2
      @virtual_x2 ||= @x2
    end

    def x2=(x2)
      @virtual_x2 = x2
    end

    def y2
      @virtual_y2 ||= @y2
    end

    def y2=(y2)
      @virtual_y2 = y2
    end

    def x3
      @virtual_x3 ||= @x3
    end

    def x3=(x3)
      @virtual_x3 = x3
    end

    def y3
      @virtual_y3 ||= @y3
    end

    def y3=(y3)
      @virtual_y3 = y3
    end

    def x4
      @virtual_x4 ||= @x4
    end

    def x4=(x4)
      @virtual_x4 = x4
    end

    def y4
      @virtual_y4 ||= @y4
    end

    def y4=(y4)
      @virtual_y4 = y4
    end


    def width
      @width ||= 200
    end

    def width=(width)
      self.x2 = width
      self.x3 = width
      @width = width
    end

    def height
      @height ||= 100
    end

    def height=(height)
      self.y3 = height
      self.y4 = height
      @height = height
    end

    def size
      @size ||= 100
    end

    def size=(size)
      @size = self.width = self.height = size
    end
  end
end