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
|
include Test # temporary WiP name for raylib bindings
WHITE = Color.new(r: 255, g: 255, b: 255, a: 255)
BLACK = Color.new(r: 0, g: 0, b: 0, a: 255)
GRAY = Color.new(r: 100, g: 100, b: 100, a: 255)
screen_width = 800
screen_height = 450
init_window(width: screen_width, height: screen_height, title: "Card Example Thingie")
Test.target_fps = 60
DefaultOrigin = Vector2.new(x: 0, y: 0)
class Card
# size of cards
Width = 80
Height = (Width * (4.0/3.0)).to_i
# list of valid coordinates a card can spawn
ValidSpawnRange = [(0..(800-Card::Width)).to_a, (0..(450-Card::Height)).to_a]
# stores any new cards that are created
Objects = []
# stores groups of cards that are overlapping
Resolver = []
attr_accessor :rec, :text, :color, :dragged
def initialize(rec: Rectangle.new(x: ValidSpawnRange[0].sample, y: ValidSpawnRange[1].sample, width: Card::Width, height: Card::Height),
text: "New Card",
color: WHITE)
self.rec = rec
self.text = text
self.color = color
self.dragged = false
Card::Objects.push self
end
# class methods
class << self
attr_accessor :card_offset
attr_writer :card_dragged
def card_dragged
@card_dragged ||= false
end
def resolve_drag
# if click -> find if you are clicking one -> if so set it click
if mouse_button_pressed?(0)
Card::Objects.reverse_each do |card|
#mouse_position # Vector2
#mouse_delta # Vector2
if check_collision_point_rec(point: mouse_position, rec: card.rec)
self.card_dragged = card
card.dragged = true
self.card_offset = [card.rec.x - mouse_x, card.rec.y - mouse_y]
# place card at front of array(to draw first)
Card::Objects.push Card::Objects.delete(card)
break
end
end
# if holding click -> check which one is being clicked -> drag it
elsif mouse_button_down?(0) && self.card_dragged
card_dragged.rec = Rectangle.new(x: (self.card_offset[0] + mouse_x), y: (self.card_offset[1] + mouse_y), width: card_dragged.rec.width, height: card_dragged.rec.height)
# if let go of click -> remove click state
elsif mouse_button_up?(0) && self.card_dragged
#card_dragged.rec.x = self.card_offset[0] + mouse_x
#card_dragged.rec.y = self.card_offset[1] + mouse_y
card_dragged.rec = Rectangle.new(x: (self.card_offset[0] + mouse_x), y: (self.card_offset[1] + mouse_y), width: card_dragged.rec.width, height: card_dragged.rec.height)
self.card_dragged.dragged = false
self.card_dragged = false
self.card_offset = false
end
end
def draw
Card::Objects.each do |card|
draw_rectangle_pro(rec: card.rec, origin: DefaultOrigin, rotation: 0, color: card.color)
draw_rectangle_lines_ex(rec: card.rec, line_thick: 2, color: BLACK)
draw_text(text: card.text, pos_x: card.rec.x + 7, pos_y: card.rec.y + 7, font_size: 30, color: BLACK)
end
end
end
end
ColorRange = (0..255).to_a
('A'..'E').each do |letter|
Card.new(text: letter, color: Color.new(r: ColorRange.sample, g: ColorRange.sample, b: ColorRange.sample, a: 255))
end
while !window_should_close do
begin_drawing
clear_background(WHITE)
Card.draw
Card.resolve_drag
#draw_text(text: "Congrats! You created your first window!", pos_x: 190, pos_y: 200, font_size: 20, color: GRAY)
end_drawing
end
close_window
|