diff --git a/src/base-environments/youth_room/Collectable.gd b/src/base-environments/youth_room/Collectable.gd index a132702..2778b9a 100644 --- a/src/base-environments/youth_room/Collectable.gd +++ b/src/base-environments/youth_room/Collectable.gd @@ -21,9 +21,10 @@ func _ready(): connect("mouse_entered", Callable(self, "_on_mouse_entered")) func _on_mouse_entered(): - input_ray_pickable = false - ui.collapsed = false - has_mouse = true + if not State.focus_locked: + input_ray_pickable = false + ui.collapsed = false + has_mouse = true func _on_mouse_exited(): print("mouse_exited") diff --git a/src/dev-util/click-trough-area.gd b/src/dev-util/click-trough-area.gd index 4533fcb..1c8f39e 100644 --- a/src/dev-util/click-trough-area.gd +++ b/src/dev-util/click-trough-area.gd @@ -17,19 +17,20 @@ func _unhandled_input(event): viewport.push_input(event) func _on_input_event(_camera: Camera3D, event: InputEvent, pos: Vector3, _normal: Vector3, _shape_idx: int): - # Position of the event in Sprite3D local coordinates. - var texture_3d_position = sprite.get_global_transform().affine_inverse() * pos - #if !is_zero_approx(texture_3d_position.z): - # # Discard event because event didn't happen on the side of the Sprite3D. - # return - # Position of the event relative to the texture. - var texture_position: Vector2 = Vector2(texture_3d_position.x, -texture_3d_position.y) / sprite.pixel_size - sprite.get_item_rect().position - # Send mouse event. - var e: InputEvent = event.duplicate() - if e is InputEventMouse: - e.set_position(texture_position) - e.set_global_position(texture_position) - viewport.push_input(e) + if not State.focus_locked: + # Position of the event in Sprite3D local coordinates. + var texture_3d_position = sprite.get_global_transform().affine_inverse() * pos + #if !is_zero_approx(texture_3d_position.z): + # # Discard event because event didn't happen on the side of the Sprite3D. + # return + # Position of the event relative to the texture. + var texture_position: Vector2 = Vector2(texture_3d_position.x, -texture_3d_position.y) / sprite.pixel_size - sprite.get_item_rect().position + # Send mouse event. + var e: InputEvent = event.duplicate() + if e is InputEventMouse: + e.set_position(texture_position) + e.set_global_position(texture_position) + viewport.push_input(e) func _on_button_pressed(): print("Button pressed") diff --git a/src/logic-scenes/board/card-board.gd b/src/logic-scenes/board/card-board.gd index 3cf5c30..90e4ab9 100644 --- a/src/logic-scenes/board/card-board.gd +++ b/src/logic-scenes/board/card-board.gd @@ -24,11 +24,11 @@ var has_stage = false: set(focus): if focus: has_stage = true - self.mouse_filter = Control.MOUSE_FILTER_PASS +self.mouse_filter = Control.MOUSE_FILTER_PASS get_tree().call_group("interactables", "collapse") else: has_stage = false - self.mouse_filter = Control.MOUSE_FILTER_IGNORE +self.mouse_filter = Control.MOUSE_FILTER_IGNORE if is_node_ready(): if focus: process_mode = Node.PROCESS_MODE_INHERIT @@ -115,6 +115,7 @@ func _ready(): if get_parent() == get_tree().root: populate_board(["c_void", 'c_joy', "p_wet", "p_thomas"]) populate_board(["c_fighting", 'c_hit', "p_girly", "p_vent"]) + mementos_collected = 2 has_stage = has_stage @@ -199,6 +200,7 @@ func handle_mouse_button(to_handle: Area2D, input: InputEvent): if not sticky_note_container.get_child_count() == 0: sticky_note_container.get_child(current_sticky_note_id).clear_if_empty() current_context = NAVIGATE + if is_board_complete(): emit_signal("board_completed") return else: _return_sticky_notes_to_panels() @@ -313,6 +315,7 @@ func _input(event): card.attach_sticky_note(sticky_note_container.get_child(current_sticky_note_id).attached_sticky_note) current_context = NAVIGATE focus_stickies = false + if is_board_complete(): emit_signal("board_completed") else: if !focus_stickies and card.has_sticky_note_attached(): currently_active_node = card.remove_sticky_note() diff --git a/src/logic-scenes/board/physics-board.tscn b/src/logic-scenes/board/physics-board.tscn index 7dd95c7..7aa8517 100644 --- a/src/logic-scenes/board/physics-board.tscn +++ b/src/logic-scenes/board/physics-board.tscn @@ -28,7 +28,7 @@ grow_horizontal = 2 grow_vertical = 2 size_flags_horizontal = 6 size_flags_vertical = 6 -mouse_filter = 1 +mouse_filter = 2 script = ExtResource("3_8v4c4") [node name="HBoxContainer" type="HBoxContainer" parent="."] diff --git a/src/logic-scenes/board/sticky-note.gd b/src/logic-scenes/board/sticky-note.gd index feb6799..23d8e98 100644 --- a/src/logic-scenes/board/sticky-note.gd +++ b/src/logic-scenes/board/sticky-note.gd @@ -132,3 +132,6 @@ func tween_transform_to(target: Transform2D): func reset_drag(): if attached_to != null: attached_to.reclaim_sticky_note() + +func _enter_tree(): + print("enter_tree") diff --git a/src/logic-scenes/card_picker/card_picker.gd b/src/logic-scenes/card_picker/card_picker.gd index 9f805af..5a54eff 100644 --- a/src/logic-scenes/card_picker/card_picker.gd +++ b/src/logic-scenes/card_picker/card_picker.gd @@ -19,9 +19,9 @@ var has_stage = false: if focus: process_mode = Node.PROCESS_MODE_INHERIT self.show() - self.mouse_filter = Control.MOUSE_FILTER_IGNORE + self.mouse_filter = Control.MOUSE_FILTER_PASS else: - self.mouse_filter = Control.MOUSE_FILTER_STOP + self.mouse_filter = Control.MOUSE_FILTER_IGNORE self.hide() process_mode = Node.PROCESS_MODE_DISABLED has_stage = focus @@ -116,6 +116,8 @@ func _input(event): if event.is_action_pressed("ui_accept"): pick(curr_selection_id) elif event.is_action_pressed("skip"): + ##fixme: using skip causes a lot of invalid state + return if selection_state == CARDS_SELECTED: transition() show_posts() @@ -160,9 +162,9 @@ func pick(id: int): print("Winning ID ", id) elif options[0].text == "": - winning_id = 0 - else: winning_id = 1 + else: + winning_id = 0 output.append(options.pop_at(winning_id)) anim_players.pop_at(winning_id).play("shuffle") diff --git a/src/logic-scenes/card_picker/card_picker.tscn b/src/logic-scenes/card_picker/card_picker.tscn index 49f2ea7..1d0e13f 100644 --- a/src/logic-scenes/card_picker/card_picker.tscn +++ b/src/logic-scenes/card_picker/card_picker.tscn @@ -1493,6 +1493,7 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +mouse_filter = 2 script = ExtResource("1_pjntm") [node name="Control" type="Control" parent="."] diff --git a/src/logic-scenes/player_controller/player_controller.gd b/src/logic-scenes/player_controller/player_controller.gd index eb350ff..bc5726d 100644 --- a/src/logic-scenes/player_controller/player_controller.gd +++ b/src/logic-scenes/player_controller/player_controller.gd @@ -58,6 +58,16 @@ var on_crouch_cooldown:bool = false @onready var camera:Camera3D = $Yaw/Pitch/Mount/Camera3D @onready var focus_ray: RayCast3D = $Yaw/Pitch/Mount/Camera3D/RayCast3D +var zoomed: + set(zoom): + if zoomed != zoom: + if zoom: + var zoom_tween = create_tween() + zoom_tween.tween_property(camera, "fov", camera.fov*0.5, 0.5) + else: + var zoom_tween = create_tween() + zoom_tween.tween_property(camera, "fov", camera.fov*2, 0.5) + zoomed = zoom signal ui_entered var has_entered:bool = false signal ui_exited @@ -77,12 +87,18 @@ func _process(_delta): has_entered = true focus_ray.get_collider().reveal() - if has_entered and has_stage: - if focus_ray.get_collider() == null: - emit_signal("ui_exited") - has_entered = false - if Input.is_action_just_pressed("ui_accept"): - State.pass_stage_to(focus_ray.get_collider()) + if has_stage: + if has_entered: + if focus_ray.get_collider() == null: + emit_signal("ui_exited") + has_entered = false + if Input.is_action_just_pressed("ui_accept"): + State.pass_stage_to(focus_ray.get_collider()) + else: + if Input.is_action_just_pressed("zoom_in_controller"): + zoomed = true + elif Input.is_action_just_released("zoom_in_controller"): + zoomed = false func _physics_process(delta:float): if has_stage: @@ -155,7 +171,12 @@ func _input(event:InputEvent): _handle_mouse_input(event) get_viewport().set_input_as_handled() if event is InputEventMouseButton and event.pressed: - State.free_focus() + if Input.is_action_just_pressed("zoom_in_mouse"): + zoomed = true + elif Input.is_action_just_pressed("zoom_out_mouse"): + zoomed = false + else: + State.free_focus() get_tree().call_group("interactables", "reveal") #if event.is_action_pressed("ui_accept"): # State.pass_stage_to(focus_ray.get_collider()) diff --git a/src/project.godot b/src/project.godot index fde2aeb..bddbbc5 100644 --- a/src/project.godot +++ b/src/project.godot @@ -124,6 +124,21 @@ skip={ , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":2,"pressure":0.0,"pressed":true,"script":null) ] } +zoom_in_mouse={ +"deadzone": 0.5, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":4,"canceled":false,"pressed":false,"double_click":false,"script":null) +] +} +zoom_out_mouse={ +"deadzone": 0.5, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":5,"canceled":false,"pressed":false,"double_click":false,"script":null) +] +} +zoom_in_controller={ +"deadzone": 0.5, +"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":4,"axis_value":1.0,"script":null) +] +} [layer_names]