Loading scenes/dragons/dragon.tscn +5 −4 Original line number Diff line number Diff line Loading @@ -8,11 +8,12 @@ size = Vector2(128, 128) [node name="Dragon" type="Area2D" node_paths=PackedStringArray("dragon")] script = ExtResource("1_jccds") dragon = NodePath("Dragon") [node name="Dragon" parent="." instance=ExtResource("2_l1h0r")] position = Vector2(-64, -64) dragon = NodePath("CollisionShape2D/Dragon") animation_duration = 10.0 [node name="CollisionShape2D" type="CollisionShape2D" parent="."] position = Vector2(0, 1) shape = SubResource("RectangleShape2D_6eaxg") [node name="Dragon" parent="CollisionShape2D" instance=ExtResource("2_l1h0r")] position = Vector2(-64, -65) scenes/dragons/dragon_entity_dragger.gd +9 −1 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ class_name DragonEntity @export var dragon: DragonSprite @export_range(3, 20) var animation_duration: float signal on_pick(dragon_id: int, position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String) Loading @@ -11,13 +12,20 @@ var id: int func _ready() -> void: set_process_input(true) _play_initial_animation() func _play_initial_animation() -> void: $CollisionShape2D.position = Vector2(get_window().size.x + 200, 0) var tween = get_tree().create_tween() tween.tween_property($CollisionShape2D, "position", Vector2(0, 0), animation_duration) func _input_event(viewport, event, shape_idx) -> void: if event is InputEventMouseButton \ and event.button_index == MOUSE_BUTTON_LEFT \ and event.is_pressed(): on_pick.emit(id, position, dragon.hat.texture, dragon.shirt.texture, dragon.shoes.texture, dragon.name_label.text) on_pick.emit(id, position + $CollisionShape2D.position, dragon.hat.texture, dragon.shirt.texture, dragon.shoes.texture, dragon.name_label.text) queue_free() Loading scenes/main.gd +37 −3 Original line number Diff line number Diff line Loading @@ -16,7 +16,12 @@ var _instantiator: DragonInstantiator var _save_load: SaveLoad var _library: DragonLibrary var _dragon_entities: Dictionary = {} var _dragon_entities: Dictionary[int, Dragon] = {} var _instantiated_dragons: Dictionary[int, DragonEntity] = {} var rng: RandomNumberGenerator = RandomNumberGenerator.new() @export var min_dragon_instantiation_time: float @export var max_dragon_instantiation_time: float func _ready(): Loading @@ -27,10 +32,36 @@ func _ready(): await get_tree().process_frame move_window_to_bottom_right() _load_game() _queue_dragon_instantiation() func _queue_dragon_instantiation(): await get_tree().create_timer(rng.randf_range(min_dragon_instantiation_time, max_dragon_instantiation_time)).timeout _instantiate_random_dragon() func _instantiate_random_dragon(): pass for spot in dragon_spots: if not _filled_spots.has(spot): var dragon: DragonEntity = _pick_random_dragon(spot.position) if dragon != null: _filled_spots[spot] = dragon.id break _queue_dragon_instantiation() func _pick_random_dragon(pos: Vector2) -> DragonEntity: for dragon in _library.dragons: var id: int = dragon['id'] if _instantiated_dragons.has(id) or _dragon_entities.has(id): continue var dragon_name: String = dragon['name'] var hat: Texture2D = hat_outfits.get_texture(dragon['hat']) var shirt: Texture2D = shirt_outfits.get_texture(dragon['shirt']) var shoes: Texture2D = shoes_outfits.get_texture(dragon['shoes']) return _instantiate_dragon_ingame(pos, hat, shirt, shoes, dragon_name, id) return null func move_window_to_bottom_right(): Loading Loading @@ -69,7 +100,7 @@ func _load_game(): print(_save_load.contents_to_save) func _instantiate_dragon_ingame(position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String, id: int): func _instantiate_dragon_ingame(position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String, id: int) -> DragonEntity: var dragon: DragonEntity = dragon_ingame.instantiate() dragon.dress(hat, shirt, shoes) dragon.set_dragon_name(dragon_name) Loading @@ -77,6 +108,8 @@ func _instantiate_dragon_ingame(position: Vector2, hat: Texture2D, shirt: Textur dragon.id = id dragon.position = position dragon.on_pick.connect(_pick_dragon) _instantiated_dragons[id] = dragon return dragon func _pick_dragon(id: int, position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String, drag: bool = true): Loading @@ -85,6 +118,7 @@ func _pick_dragon(id: int, position: Vector2, hat: Texture2D, shirt: Texture2D, _dragon_entities[id] = dragon dragon.place_back.connect(_dragon_place_back) add_child(dragon) _instantiated_dragons.erase(id) for spot in _filled_spots: if _filled_spots[spot] == id: Loading scenes/main.tscn +2 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,8 @@ dragon_spots = [NodePath("DragonSpot1"), NodePath("DragonSpot2"), NodePath("Drag hat_outfits = ExtResource("4_85g3d") shirt_outfits = ExtResource("5_choun") shoes_outfits = ExtResource("6_ya4ey") min_dragon_instantiation_time = 2.0 max_dragon_instantiation_time = 10.0 [node name="CanvasLayer" type="CanvasLayer" parent="."] Loading scenes/window/draggable.gd +8 −0 Original line number Diff line number Diff line Loading @@ -7,9 +7,13 @@ var dragging_start_position: Vector2i = Vector2i() @onready var dragon: Dragon = $".." var _initial_drag_requested: bool = false func _ready() -> void: set_process_input(true) if _initial_drag_requested: initial_drag() func initial_drag(): Loading @@ -17,6 +21,10 @@ func initial_drag(): dragging = true func queue_initial_drag(): _initial_drag_requested = true func _input(event) -> void: if event is not InputEventMouseButton: return Loading Loading
scenes/dragons/dragon.tscn +5 −4 Original line number Diff line number Diff line Loading @@ -8,11 +8,12 @@ size = Vector2(128, 128) [node name="Dragon" type="Area2D" node_paths=PackedStringArray("dragon")] script = ExtResource("1_jccds") dragon = NodePath("Dragon") [node name="Dragon" parent="." instance=ExtResource("2_l1h0r")] position = Vector2(-64, -64) dragon = NodePath("CollisionShape2D/Dragon") animation_duration = 10.0 [node name="CollisionShape2D" type="CollisionShape2D" parent="."] position = Vector2(0, 1) shape = SubResource("RectangleShape2D_6eaxg") [node name="Dragon" parent="CollisionShape2D" instance=ExtResource("2_l1h0r")] position = Vector2(-64, -65)
scenes/dragons/dragon_entity_dragger.gd +9 −1 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ class_name DragonEntity @export var dragon: DragonSprite @export_range(3, 20) var animation_duration: float signal on_pick(dragon_id: int, position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String) Loading @@ -11,13 +12,20 @@ var id: int func _ready() -> void: set_process_input(true) _play_initial_animation() func _play_initial_animation() -> void: $CollisionShape2D.position = Vector2(get_window().size.x + 200, 0) var tween = get_tree().create_tween() tween.tween_property($CollisionShape2D, "position", Vector2(0, 0), animation_duration) func _input_event(viewport, event, shape_idx) -> void: if event is InputEventMouseButton \ and event.button_index == MOUSE_BUTTON_LEFT \ and event.is_pressed(): on_pick.emit(id, position, dragon.hat.texture, dragon.shirt.texture, dragon.shoes.texture, dragon.name_label.text) on_pick.emit(id, position + $CollisionShape2D.position, dragon.hat.texture, dragon.shirt.texture, dragon.shoes.texture, dragon.name_label.text) queue_free() Loading
scenes/main.gd +37 −3 Original line number Diff line number Diff line Loading @@ -16,7 +16,12 @@ var _instantiator: DragonInstantiator var _save_load: SaveLoad var _library: DragonLibrary var _dragon_entities: Dictionary = {} var _dragon_entities: Dictionary[int, Dragon] = {} var _instantiated_dragons: Dictionary[int, DragonEntity] = {} var rng: RandomNumberGenerator = RandomNumberGenerator.new() @export var min_dragon_instantiation_time: float @export var max_dragon_instantiation_time: float func _ready(): Loading @@ -27,10 +32,36 @@ func _ready(): await get_tree().process_frame move_window_to_bottom_right() _load_game() _queue_dragon_instantiation() func _queue_dragon_instantiation(): await get_tree().create_timer(rng.randf_range(min_dragon_instantiation_time, max_dragon_instantiation_time)).timeout _instantiate_random_dragon() func _instantiate_random_dragon(): pass for spot in dragon_spots: if not _filled_spots.has(spot): var dragon: DragonEntity = _pick_random_dragon(spot.position) if dragon != null: _filled_spots[spot] = dragon.id break _queue_dragon_instantiation() func _pick_random_dragon(pos: Vector2) -> DragonEntity: for dragon in _library.dragons: var id: int = dragon['id'] if _instantiated_dragons.has(id) or _dragon_entities.has(id): continue var dragon_name: String = dragon['name'] var hat: Texture2D = hat_outfits.get_texture(dragon['hat']) var shirt: Texture2D = shirt_outfits.get_texture(dragon['shirt']) var shoes: Texture2D = shoes_outfits.get_texture(dragon['shoes']) return _instantiate_dragon_ingame(pos, hat, shirt, shoes, dragon_name, id) return null func move_window_to_bottom_right(): Loading Loading @@ -69,7 +100,7 @@ func _load_game(): print(_save_load.contents_to_save) func _instantiate_dragon_ingame(position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String, id: int): func _instantiate_dragon_ingame(position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String, id: int) -> DragonEntity: var dragon: DragonEntity = dragon_ingame.instantiate() dragon.dress(hat, shirt, shoes) dragon.set_dragon_name(dragon_name) Loading @@ -77,6 +108,8 @@ func _instantiate_dragon_ingame(position: Vector2, hat: Texture2D, shirt: Textur dragon.id = id dragon.position = position dragon.on_pick.connect(_pick_dragon) _instantiated_dragons[id] = dragon return dragon func _pick_dragon(id: int, position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String, drag: bool = true): Loading @@ -85,6 +118,7 @@ func _pick_dragon(id: int, position: Vector2, hat: Texture2D, shirt: Texture2D, _dragon_entities[id] = dragon dragon.place_back.connect(_dragon_place_back) add_child(dragon) _instantiated_dragons.erase(id) for spot in _filled_spots: if _filled_spots[spot] == id: Loading
scenes/main.tscn +2 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,8 @@ dragon_spots = [NodePath("DragonSpot1"), NodePath("DragonSpot2"), NodePath("Drag hat_outfits = ExtResource("4_85g3d") shirt_outfits = ExtResource("5_choun") shoes_outfits = ExtResource("6_ya4ey") min_dragon_instantiation_time = 2.0 max_dragon_instantiation_time = 10.0 [node name="CanvasLayer" type="CanvasLayer" parent="."] Loading
scenes/window/draggable.gd +8 −0 Original line number Diff line number Diff line Loading @@ -7,9 +7,13 @@ var dragging_start_position: Vector2i = Vector2i() @onready var dragon: Dragon = $".." var _initial_drag_requested: bool = false func _ready() -> void: set_process_input(true) if _initial_drag_requested: initial_drag() func initial_drag(): Loading @@ -17,6 +21,10 @@ func initial_drag(): dragging = true func queue_initial_drag(): _initial_drag_requested = true func _input(event) -> void: if event is not InputEventMouseButton: return Loading