@@ -17,10 +17,18 @@ extends Sprite
17
17
18
18
signal drag_started (piece )
19
19
signal drag_ended
20
+ signal clicked (piece )
21
+ signal unclicked
22
+ signal entered (piece )
23
+ signal exited
20
24
25
+ var tile_type
21
26
var sprite_loc = []
22
- var draggable = false # cannot drag unless is Player.mytile and is active in play area
23
- var dragging = false # if true, means mouse is actively dragging
27
+ var SwipeOptions = preload ("res://enums/SwipeOptions.gd" )
28
+ var swipe_options = SwipeOptions .CANNOT
29
+
30
+ var SwipeState = preload ("res://enums/SwipeState.gd" )
31
+ var swipe_state = SwipeState .IDLE
24
32
25
33
const wd = 100.0 # width of each sprite image in items.png
26
34
const ht = 100.0 # height of each sprite images in items.png
@@ -30,6 +38,10 @@ func _ready():
30
38
self .connect ("drag_started" , get_node ("/root/GameNode2D/GameSwipeDetector" ), "piece_being_dragged" )
31
39
self .connect ("drag_ended" , get_node ("/root/GameNode2D" ), "piece_done_dragged" )
32
40
self .connect ("drag_ended" , get_node ("/root/GameNode2D/GameSwipeDetector" ), "piece_done_dragged" )
41
+ self .connect ("clicked" , get_node ("/root/GameNode2D/GameSwipeDetector" ), "piece_clicked" )
42
+ self .connect ("unclicked" , get_node ("/root/GameNode2D/GameSwipeDetector" ), "piece_unclicked" )
43
+ self .connect ("entered" , get_node ("/root/GameNode2D/GameSwipeDetector" ), "piece_entered" )
44
+ self .connect ("exited" , get_node ("/root/GameNode2D/GameSwipeDetector" ), "piece_exited" )
33
45
34
46
func _init ():
35
47
# within the image map, these are the locations of the tiles
@@ -43,10 +55,10 @@ func _init():
43
55
sprite_loc .push_back (Rect2 (6 * wd , 0 , wd , ht )); # dog?
44
56
45
57
func set_tile_type (my_tile_type ):
46
- var icon = my_tile_type # Fack figure out Database later TileDatabase.get_item_sprite(my_type_ordinal)
58
+ self . tile_type = my_tile_type # TODO: figure out Database later TileDatabase.get_item_sprite(my_type_ordinal)
47
59
set_texture (preload ("res://images/items.png" )) # res://images/items.png is a spritesheet
48
60
set_region (true ) # we want a small part of it
49
- set_region_rect (sprite_loc [icon ]) # this is the part we want
61
+ set_region_rect (sprite_loc [self . tile_type ]) # this is the part we want
50
62
set_scale (Vector2 (G .SLOT_SIZE / wd ,G .SLOT_SIZE / ht ))
51
63
52
64
# This will be called by GameScene
@@ -58,7 +70,17 @@ func start_swipe_effect():
58
70
59
71
# only the Player tiles will be set draggable (not the shadows)
60
72
func set_draggable (candrag ):
61
- self .draggable = candrag
73
+ if candrag :
74
+ self .swipe_options = SwipeOptions .CAN_DRAG
75
+ else :
76
+ self .swipe_options = SwipeOptions .CANNOT
77
+
78
+ # this is set by Player
79
+ func set_swipeable (canswipe ):
80
+ if canswipe :
81
+ self .swipe_options = SwipeOptions .CAN_SWIPE
82
+ else :
83
+ self .swipe_options = SwipeOptions .CANNOT
62
84
63
85
func is_shadow ():
64
86
set_modulate (Color (1 ,1 ,1 , 0.3 ))
@@ -77,17 +99,50 @@ func darken():
77
99
78
100
79
101
func _on_Area2D_input_event ( viewport , event , shape_idx ):
80
- if not draggable :
81
- return
82
-
102
+ match swipe_options :
103
+ SwipeOptions .CANNOT :
104
+ return
105
+ SwipeOptions .CAN_DRAG :
106
+ _on_Segment_can_drag (event )
107
+ SwipeOptions .CAN_SWIPE :
108
+ _on_Segment_can_swipe (event )
109
+
110
+ func _on_Segment_can_drag (event ):
83
111
if event is InputEventScreenTouch or event is InputEventMouseButton :
84
112
if event .pressed :
85
- dragging = true
113
+ swipe_state = SwipeState . DRAG
86
114
# need to tell Game to stop gravity
87
115
emit_signal ("drag_started" , self )
88
116
else : # not event.pressed:
89
117
emit_signal ("drag_ended" , Helpers .pixels_to_slot (position ))
90
118
# need to tell Game to start gravity
91
- dragging = false
92
- if dragging :
93
- position = get_viewport ().get_mouse_position ()
119
+ swipe_state = SwipeState .IDLE
120
+
121
+ func _on_Segment_can_swipe (event ):
122
+ print ("swipe seg clicked or unclicked" )
123
+ if swipe_options != SwipeOptions .CAN_SWIPE :
124
+ print ("but not swipable (wtf how did we get past gateway func)" )
125
+ return
126
+ if event is InputEventScreenTouch or event is InputEventMouseButton :
127
+ if event .pressed :
128
+ print ("swipe seg clicked" )
129
+ emit_signal ("clicked" , Helpers .pixels_to_slot (get_position ()), self .tile_type )
130
+ else : # not event.pressed:
131
+ print ("swipe seg unclicked" )
132
+ emit_signal ("unclicked" )
133
+
134
+
135
+ func _on_Segment_mouse_entered ():
136
+ print ("segment entered" )
137
+ if swipe_options != SwipeOptions .CAN_SWIPE :
138
+ print ("but not swipeable" )
139
+ return
140
+ emit_signal ("entered" , Helpers .pixels_to_slot (get_position ()), self .tile_type )
141
+
142
+ func _on_Segment_mouse_exited ():
143
+ print ("segment exited" )
144
+ if swipe_options != SwipeOptions .CAN_SWIPE :
145
+ print ("but not swipeable" )
146
+ return
147
+ emit_signal ("exited" , Helpers .pixels_to_slot (get_position ()), self .tile_type )
148
+
0 commit comments