summaryrefslogtreecommitdiffhomepage
path: root/adapt_triangle.rb
blob: e091ec1a8a26de15805006f9312294a993342bda (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
# frozen_string_literal: true

module AdaptTriangle

  def _translate_x(x)
    @x1 += x
    @x2 += x
    @x3 += x
  end

  def _translate_y(y)
    @y1 += y
    @y2 += y
    @y3 += y
  end

  def _rotate(angle)
    @x1 = ((@x1) * Math.cos(angle)) - ((@y1) * Math.sin(angle))
    @y1 = ((@x1) * Math.sin(angle)) + ((@y1) * Math.cos(angle))
    @x2 = ((@x2) * Math.cos(angle)) - ((@y2) * Math.sin(angle))
    @y2 = ((@x2) * Math.sin(angle)) + ((@y2) * Math.cos(angle))
    @x3 = ((@x3) * Math.cos(angle)) - ((@y3) * Math.sin(angle))
    @y3 = ((@x3) * Math.sin(angle)) + ((@y3) * Math.cos(angle))
  end

  def _update
    angle = Camera.angle * (Math::PI / 180)
    @x1 = ((x + x1 + Camera.x) * Math.cos(angle)) - ((y + y1 + Camera.y) * Math.sin(angle))
    @y1 = ((x + x1 + Camera.x) * Math.sin(angle)) + ((y + y1 + Camera.y) * Math.cos(angle))
    @x2 = ((x + x2 + Camera.x) * Math.cos(angle)) - ((y + y2 + Camera.y) * Math.sin(angle))
    @y2 = ((x + x2 + Camera.x) * Math.sin(angle)) + ((y + y2 + Camera.y) * Math.cos(angle))
    @x3 = ((x + x3 + Camera.x) * Math.cos(angle)) - ((y + y3 + Camera.y) * Math.sin(angle))
    @y3 = ((x + x3 + Camera.x) * Math.sin(angle)) + ((y + y3 + Camera.y) * Math.cos(angle))
  end

  def _x1
    @x1
  end

  def _y1
    @y1
  end

  def x
    @x ||= x1
  end

  def x=(x)
    #diff = x - self.x
    #self.x1 += diff
    #self.x2 += diff
    #self.x3 += diff
    @x = x
    _update
  end

  def y
    @y ||= y1
  end

  def y=(y)
    #diff = y - self.y
    #self.y1 += diff
    #self.y2 += diff
    #self.y3 += diff
    @y = y
  end

  #undo rotation
  def x1
    @virtual_x1 ||= @x1
    #(@x1 * Math.cos(-Camera.angle)) - (@y1 * Math.sin(-Camera.angle)) - Camera.x
  end

  #difference between 'x1' and undone rotation > then rotated
  def x1=(x1)
    @virtual_x1 = x1
    _update
    #temp = self.x1
    #@x1 += ((x1 - temp) * Math.cos(Camera.angle))
    #@y1 += ((x1 - temp) * Math.sin(Camera.angle))
  end

  def y1
    @virtual_y1 ||= @y1
    #(@x1 * Math.sin(-Camera.angle)) + (@y1 * Math.cos(-Camera.angle)) - Camera.y
  end

  def y1=(y1)
    @virtual_y1 = y1
    _update
    #temp = self.y1
    #@x1 += -((y1 - temp) * Math.sin(Camera.angle))
    #@y1 += ((y1 - temp) * Math.cos(Camera.angle))
  end

  def x2
    @virtual_x2 ||= @x2
  end

  def x2=(x2)
    @virtual_x2 = x2
    _update
  end

  def y2
    @virtual_y2 ||= @y2
  end

  def y2=(y2)
    @virtual_y2 = y2
    _update
  end

  def x3
    @virtual_x3 ||= @x3
  end

  def x3=(x3)
    @virtual_x3 = x3
    _update
  end

  def y3
    @virtual_y3 ||= @y3
  end

  def y3=(y3)
    @virtual_y3 = y3
    _update
  end
end