summaryrefslogtreecommitdiffhomepage
path: root/main.rb
blob: 8a872b6ff639d7918aa5923056f92b8cc70dbc35 (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
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