Compare commits

..

8 Commits

Author SHA1 Message Date
96b5bae9d0 Remove Madtalk 2025-09-15 20:50:50 -05:00
2b58781907 idk richtext stuff 2025-09-15 00:40:58 -05:00
39aca9aa3f prog 2025-09-01 00:13:44 -05:00
aea5158d6e prog 2025-08-31 17:53:17 -05:00
6d75b33775 Gonna invent a scripting language lol 2025-08-30 22:25:50 -05:00
3ccf4ebabb Just making things work again 2025-08-30 21:38:53 -05:00
6f1defb3da More renaming 2025-08-19 19:57:32 -05:00
379c7007aa rename consistency 2025-08-19 19:57:24 -05:00
100 changed files with 522 additions and 227 deletions

View File

@@ -86,7 +86,7 @@ func _enter_tree():
_parse_input_actions()
func _exit_tree():
Mapper.queue_free()
Mapper = null
func _parse_input_actions():
_custom_input_actions.clear()
@@ -189,10 +189,13 @@ func refresh():
func get_joypad_type(controller: int = _last_controller) -> ControllerSettings.Devices:
return Mapper._get_joypad_type(controller, _settings.joypad_fallback)
func parse_path(path: String, input_type = _last_input_type, last_controller = _last_controller) -> Texture:
func get_last_input_type() -> InputType:
return _last_input_type
func parse_path(path: String, input_type = _last_input_type, last_controller = _last_controller, forced_controller_icon_style = ControllerSettings.Devices.NONE) -> Texture:
if typeof(input_type) == TYPE_NIL:
return null
var root_paths := _expand_path(path, input_type, last_controller)
var root_paths := _expand_path(path, input_type, last_controller, forced_controller_icon_style)
for root_path in root_paths:
if _load_icon(root_path):
continue
@@ -228,6 +231,7 @@ func parse_event_modifiers(event: InputEvent) -> Array[Texture]:
for icon_path in _expand_path(modifier, InputType.KEYBOARD_MOUSE, -1):
if _load_icon(icon_path) == OK:
icons.push_back(_cached_icons[icon_path])
break
return icons
@@ -270,7 +274,7 @@ func get_matching_event(path: String, input_type: InputType = _last_input_type,
else:
events = InputMap.action_get_events(path)
var fallback = null
var fallbacks = []
for event in events:
if not is_instance_valid(event): continue
@@ -283,13 +287,15 @@ func get_matching_event(path: String, input_type: InputType = _last_input_type,
# Use the first device specific mapping if there is one.
if event.device == controller:
return event
# Otherwise use the first "all devices" mapping.
elif fallback == null and event.device < 0:
fallback = event
# Otherwise, we create a fallback prioritizing events with 'ALL_DEVICE'
if event.device < 0: # All-device event
fallbacks.push_front(event)
else:
fallbacks.push_back(event)
return fallback
return fallbacks[0] if not fallbacks.is_empty() else null
func _expand_path(path: String, input_type: int, controller: int) -> Array:
func _expand_path(path: String, input_type: int, controller: int, forced_controller_icon_style = ControllerSettings.Devices.NONE) -> Array:
var paths := []
var base_paths := [
_settings.custom_asset_dir + "/",
@@ -298,20 +304,20 @@ func _expand_path(path: String, input_type: int, controller: int) -> Array:
for base_path in base_paths:
if base_path.is_empty():
continue
base_path += _convert_path_to_asset_file(path, input_type, controller)
base_path += _convert_path_to_asset_file(path, input_type, controller, forced_controller_icon_style)
paths.push_back(base_path + "." + _base_extension)
return paths
func _convert_path_to_asset_file(path: String, input_type: int, controller: int) -> String:
func _convert_path_to_asset_file(path: String, input_type: int, controller: int, forced_controller_icon_style = ControllerSettings.Devices.NONE) -> String:
match get_path_type(path):
PathType.INPUT_ACTION:
var event := get_matching_event(path, input_type, controller)
if event:
return _convert_event_to_path(event)
return _convert_event_to_path(event, controller, forced_controller_icon_style)
return path
PathType.JOYPAD_PATH:
return Mapper._convert_joypad_path(path, controller, _settings.joypad_fallback)
return Mapper._convert_joypad_path(path, controller, _settings.joypad_fallback, forced_controller_icon_style)
PathType.SPECIFIC_PATH, _:
return path
@@ -372,7 +378,7 @@ func _convert_asset_file_to_tts(path: String) -> String:
_:
return path
func _convert_event_to_path(event: InputEvent):
func _convert_event_to_path(event: InputEvent, controller: int = _last_controller, forced_controller_icon_style = ControllerSettings.Devices.NONE):
if event is InputEventKey:
# If this is a physical key, convert to localized scancode
if event.keycode == 0:
@@ -381,9 +387,9 @@ func _convert_event_to_path(event: InputEvent):
elif event is InputEventMouseButton:
return _convert_mouse_button_to_path(event.button_index)
elif event is InputEventJoypadButton:
return _convert_joypad_button_to_path(event.button_index, event.device)
return _convert_joypad_button_to_path(event.button_index, controller, forced_controller_icon_style)
elif event is InputEventJoypadMotion:
return _convert_joypad_motion_to_path(event.axis, event.device)
return _convert_joypad_motion_to_path(event.axis, controller, forced_controller_icon_style)
func _convert_key_to_path(scancode: int):
match scancode:
@@ -615,7 +621,7 @@ func _convert_mouse_button_to_path(button_index: int):
_:
return "mouse/sample"
func _convert_joypad_button_to_path(button_index: int, controller: int):
func _convert_joypad_button_to_path(button_index: int, controller: int, forced_controller_icon_style = ControllerSettings.Devices.NONE):
var path
match button_index:
JOY_BUTTON_A:
@@ -652,9 +658,9 @@ func _convert_joypad_button_to_path(button_index: int, controller: int):
path = "joypad/share"
_:
return ""
return Mapper._convert_joypad_path(path, controller, _settings.joypad_fallback)
return Mapper._convert_joypad_path(path, controller, _settings.joypad_fallback, forced_controller_icon_style)
func _convert_joypad_motion_to_path(axis: int, controller: int):
func _convert_joypad_motion_to_path(axis: int, controller: int, forced_controller_icon_style = ControllerSettings.Devices.NONE):
var path : String
match axis:
JOY_AXIS_LEFT_X, JOY_AXIS_LEFT_Y:
@@ -667,7 +673,7 @@ func _convert_joypad_motion_to_path(axis: int, controller: int):
path = "joypad/rt"
_:
return ""
return Mapper._convert_joypad_path(path, controller, _settings.joypad_fallback)
return Mapper._convert_joypad_path(path, controller, _settings.joypad_fallback, forced_controller_icon_style)
func _load_icon(path: String) -> int:
if _cached_icons.has(path): return OK

View File

@@ -1 +1 @@
uid://cxxl7e1hu587n
uid://b06g4dpg627b5

View File

@@ -3,6 +3,7 @@ extends Resource
class_name ControllerSettings
enum Devices {
NONE = -1,
LUNA,
OUYA,
PS3,

View File

@@ -0,0 +1 @@
uid://bih8ls5msy63l

View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 Ricardo Subtil
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1,8 +1,8 @@
extends Node
extends RefCounted
class_name ControllerMapper
func _convert_joypad_path(path: String, device: int, fallback: ControllerSettings.Devices) -> String:
match _get_joypad_type(device, fallback):
func _convert_joypad_path(path: String, device: int, fallback: ControllerSettings.Devices, force_controller_icon_style = ControllerSettings.Devices.NONE) -> String:
match _get_joypad_type(device, fallback, force_controller_icon_style):
ControllerSettings.Devices.LUNA:
return _convert_joypad_to_luna(path)
ControllerSettings.Devices.PS3:
@@ -32,7 +32,9 @@ func _convert_joypad_path(path: String, device: int, fallback: ControllerSetting
_:
return ""
func _get_joypad_type(device, fallback):
func _get_joypad_type(device, fallback, force_controller_icon_style):
if force_controller_icon_style != ControllerSettings.Devices.NONE:
return force_controller_icon_style
var available = Input.get_connected_joypads()
if available.is_empty():
return fallback
@@ -264,7 +266,7 @@ func _convert_joypad_to_steamdeck(path: String):
"rt":
return path.replace("/rt", "/r2")
"select":
return path.replace("/select", "/square")
return path.replace("/select", "/inventory")
"start":
return path.replace("/start", "/menu")
"home":

View File

@@ -1 +1 @@
uid://dtgqdoflwmo0b
uid://5wx82aghglqr

View File

@@ -1 +0,0 @@
uid://dygveqy02jjgx

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ds5yo8kn81uem"
path="res://.godot/imported/inventory.png-2e96b194d1562d723597b2d307313c1b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/steamdeck/inventory.png"
dest_files=["res://.godot/imported/inventory.png-2e96b194d1562d723597b2d307313c1b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@@ -1 +1 @@
uid://lm0qpml4w2mx
uid://jcpjcl10iatx

View File

@@ -1 +1 @@
uid://dkn6l8tlu56d8
uid://xp37xj8kduow

View File

@@ -1 +1 @@
uid://sg5ntoaywgfd
uid://r1qngdbv7gh4

View File

@@ -1 +1 @@
uid://125nay2twqlr
uid://bsynmd02318ph

View File

@@ -1 +1 @@
uid://d1hrxvtfr4t5w
uid://da3havxu352nb

View File

@@ -50,7 +50,7 @@ class_name ControllerIconTexture
## # res://addons/controller_icons/assets/steam/gyro.png
## path = "steam/gyro"
## [/codeblock]
@export var path : String = "":
@export var path: String = "":
set(_path):
path = _path
_load_texture_path()
@@ -63,15 +63,29 @@ enum ShowMode {
## Show the icon only if a specific input method is being used. When hidden,
## the icon will not occupy have any space (no width and height).
@export var show_mode : ShowMode = ShowMode.ANY:
@export var show_mode: ShowMode = ShowMode.ANY:
set(_show_mode):
show_mode = _show_mode
_load_texture_path()
## Forces the icon to show a specific controller style, regardless of the
## currently used controller type.
##[br][br]
## This will override force_device if set to a value other than NONE.
##[br][br]
## This is only relevant for paths using input actions, and has no effect on
## other scenarios.
@export var force_controller_icon_style: ControllerSettings.Devices = ControllerSettings.Devices.NONE:
set(_force_controller_icon_style):
force_controller_icon_style = _force_controller_icon_style
_load_texture_path()
enum ForceType {
NONE, ## Icon will swap according to the used input method.
KEYBOARD_MOUSE, ## Icon will always show the keyboard/mouse action.
CONTROLLER, ## Icon will always show the controller action.
CONTROLLER, ## Icon will always show the controller action.
}
## Forces the icon to show either the keyboard/mouse or controller icon,
@@ -79,14 +93,42 @@ enum ForceType {
##[br][br]
## This is only relevant for paths using input actions, and has no effect on
## other scenarios.
@export var force_type : ForceType = ForceType.NONE:
@export var force_type: ForceType = ForceType.NONE:
set(_force_type):
force_type = _force_type
_load_texture_path()
enum ForceDevice {
DEVICE_0,
DEVICE_1,
DEVICE_2,
DEVICE_3,
DEVICE_4,
DEVICE_5,
DEVICE_6,
DEVICE_7,
DEVICE_8,
DEVICE_9,
DEVICE_10,
DEVICE_11,
DEVICE_12,
DEVICE_13,
DEVICE_14,
DEVICE_15,
ANY # No device will be forced
}
## Forces the icon to use the textures for the device connected at the specified index.
## For example, if a PlayStation 5 controller is connected at device_index 0,
## the icon will always show PlayStation 5 textures.
@export var force_device: ForceDevice = ForceDevice.ANY:
set(_force_device):
force_device = _force_device
_load_texture_path()
@export_subgroup("Text Rendering")
## Custom LabelSettings. If set, overrides the addon's global label settings.
@export var custom_label_settings : LabelSettings:
@export var custom_label_settings: LabelSettings:
set(_custom_label_settings):
custom_label_settings = _custom_label_settings
_load_texture_path()
@@ -117,7 +159,7 @@ func _can_be_shown():
0, _:
return true
var _textures : Array[Texture2D]:
var _textures: Array[Texture2D]:
set(__textures):
# UPGRADE: In Godot 4.2, for-loop variables can be
# statically typed:
@@ -147,9 +189,9 @@ var _textures : Array[Texture2D]:
if tex:
tex.connect("changed", _reload_resource)
var _font : Font
var _label_settings : LabelSettings
var _text_size : Vector2
var _font: Font
var _label_settings: LabelSettings
var _text_size: Vector2
func _on_label_settings_changed():
_font = ThemeDB.fallback_font if not _label_settings.font else _label_settings.font
@@ -161,13 +203,14 @@ func _reload_resource():
emit_changed()
func _load_texture_path_impl():
var textures : Array[Texture2D] = []
var textures: Array[Texture2D] = []
if ControllerIcons.is_node_ready() and _can_be_shown():
var input_type = ControllerIcons._last_input_type if force_type == ForceType.NONE else force_type - 1
if ControllerIcons.get_path_type(path) == ControllerIcons.PathType.INPUT_ACTION:
var event := ControllerIcons.get_matching_event(path, input_type)
textures.append_array(ControllerIcons.parse_event_modifiers(event))
var tex := ControllerIcons.parse_path(path, input_type)
var target_device = force_device if force_device != ForceDevice.ANY else ControllerIcons._last_controller
var tex := ControllerIcons.parse_path(path, input_type, target_device, force_controller_icon_style)
if tex:
textures.append(tex)
_textures = textures
@@ -200,7 +243,7 @@ func _get_width() -> int:
return accum
, 0)
if _label_settings:
ret += max(0, _textures.size()-1) * _text_size.x
ret += max(0, _textures.size() - 1) * _text_size.x
# If ret is 0, return a size of 2 to prevent triggering engine checks
# for null sizes. The correct size will be set at a later frame.
return ret if ret > 0 else _NULL_SIZE
@@ -235,7 +278,7 @@ func _draw(to_canvas_item: RID, pos: Vector2, modulate: Color, transpose: bool):
var position := pos
for i in range(_textures.size()):
var tex:Texture2D = _textures[i]
var tex: Texture2D = _textures[i]
if !tex: continue
if i != 0:
@@ -256,7 +299,7 @@ func _draw_rect(to_canvas_item: RID, rect: Rect2, tile: bool, modulate: Color, t
var height_ratio := rect.size.y / _get_height()
for i in range(_textures.size()):
var tex:Texture2D = _textures[i]
var tex: Texture2D = _textures[i]
if !tex: continue
if i != 0:
@@ -278,7 +321,7 @@ func _draw_rect_region(to_canvas_item: RID, rect: Rect2, src_rect: Rect2, modula
var height_ratio := rect.size.y / _get_height()
for i in range(_textures.size()):
var tex:Texture2D = _textures[i]
var tex: Texture2D = _textures[i]
if !tex: continue
if i != 0:
@@ -314,15 +357,15 @@ func _draw_text(to_canvas_item: RID, font_position: Vector2, text: String):
_font.draw_string_outline(to_canvas_item, font_position, text, HORIZONTAL_ALIGNMENT_LEFT, -1, _label_settings.font_size, _label_settings.outline_size, _label_settings.outline_color)
_font.draw_string(to_canvas_item, font_position, text, HORIZONTAL_ALIGNMENT_CENTER, -1, _label_settings.font_size, _label_settings.font_color)
var _helper_viewport : Viewport
var _is_stitching_texture : bool = false
var _helper_viewport: Viewport
var _is_stitching_texture: bool = false
func _stitch_texture():
if _textures.is_empty():
return
_is_stitching_texture = true
var font_image : Image
var font_image: Image
if _textures.size() > 1:
# Generate a viewport to draw the text
_helper_viewport = SubViewport.new()
@@ -345,7 +388,7 @@ func _stitch_texture():
_helper_viewport.free()
var position := Vector2i(0, 0)
var img : Image
var img: Image
for i in range(_textures.size()):
if !_textures[i]: continue
@@ -375,7 +418,7 @@ func _stitch_texture():
# This is necessary for 3D sprites, as the texture is assigned to a material, and not drawn directly.
# For multi prompts, we need to generate a texture
var _dirty := true
var _texture_3d : Texture
var _texture_3d: Texture
func _get_rid():
if _dirty:
if not _is_stitching_texture:

View File

@@ -1 +1 @@
uid://ddxpo5u73ssi2
uid://cxab4gf8nejc2

View File

@@ -1 +1 @@
uid://k2tud3diool
uid://dlwwg6hbxcg6r

View File

@@ -1 +1 @@
uid://bpos4yaigyeqr
uid://dns2c4458ekvc

View File

@@ -1 +1 @@
uid://dmp4w4ojx7klt
uid://cispm18xp24wt

View File

@@ -1 +1 @@
uid://bu8t48xqekc8o
uid://c6lqhrewwbp61

View File

@@ -1 +1 @@
uid://da1ors8v36hv3
uid://texv8inbqrdh

View File

@@ -1 +1 @@
uid://dt82cmmp3uy7l
uid://wnl1k7337x2u

View File

@@ -3,5 +3,5 @@
name="Controller Icons"
description="Provides icons for all major controllers and keyboard, with automatic icon remapping."
author="rsubtil"
version="3.1.4"
version="3.1.5"
script="plugin.gd"

View File

@@ -1 +1 @@
uid://cajvrhetudhyg
uid://xvjobdx0h3gi

View File

@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="ControllerSettings" load_steps=2 format=3 uid="uid://dolsrvh5w47et"]
[ext_resource type="Script" path="res://addons/controller_icons/Settings.gd" id="1"]
[ext_resource type="Script" path="res://addons/controller_icons/ControllerSettings.gd" id="1"]
[resource]
script = ExtResource("1")

View File

@@ -1 +0,0 @@
class_name NPC extends CharacterBody3D

View File

@@ -1 +0,0 @@
class_name NPCMovement extends "res://entities/EntityMovement.gd"

View File

@@ -1 +0,0 @@
class_name Player extends CharacterBody3D

View File

@@ -1,6 +1,6 @@
@tool
class_name EntityMovement extends Node
const SPEED = 64.0
const FRICTION = 0.01
enum FacingDirection {
@@ -24,61 +24,65 @@ const FacingDirAngle = {
FacingDirection.WEST: -PI / 2
};
var _inputDir:Vector2 = Vector2.ZERO
var _facingDir:FacingDirection = FacingDirection.SOUTH
var _running:bool = false
@export var body:CharacterBody3D
@export var rotate:Node3D
@export var sprite:AnimatedSprite3D
@export var walkSpeed:float = 48.0
@export var runSpeed:float = 64.0
@export var facingDir:FacingDirection = FacingDirection.SOUTH:
set(value):
_facingDir = value
_updateSprite()
get:
return _facingDir
var facingDir:FacingDirection = FacingDirection.SOUTH
var inputDir:Vector2 = Vector2.ZERO
func _enter_tree() -> void:
if !sprite:
#
# Private Methods
#
func _updateSprite() -> void:
if !sprite || sprite.animation == FacingDirWalkAnimations[facingDir]:
return
for dir in FacingDirWalkAnimations:
if sprite.animation != FacingDirWalkAnimations[dir]:
continue
facingDir = dir
break
sprite.animation = FacingDirWalkAnimations[facingDir]
func canMove() -> bool:
return true
func applyFacingDir() -> void:
if !sprite || inputDir.length() <= 0.01:
func _applyFacingDir() -> void:
if !sprite || _inputDir.length() <= 0.01:
return
if inputDir.y > 0:
if facingDir != FacingDirection.NORTH && inputDir.x != 0:
if inputDir.x > 0 && facingDir == FacingDirection.EAST:
if _inputDir.y > 0:
if facingDir != FacingDirection.NORTH && _inputDir.x != 0:
if _inputDir.x > 0 && facingDir == FacingDirection.EAST:
facingDir = FacingDirection.EAST
elif inputDir.x < 0 && facingDir == FacingDirection.WEST:
elif _inputDir.x < 0 && facingDir == FacingDirection.WEST:
facingDir = FacingDirection.WEST
else:
facingDir = FacingDirection.NORTH
else:
facingDir = FacingDirection.NORTH
elif inputDir.y < 0:
if facingDir != FacingDirection.SOUTH && inputDir.x != 0:
if inputDir.x > 0 && facingDir == FacingDirection.EAST:
elif _inputDir.y < 0:
if facingDir != FacingDirection.SOUTH && _inputDir.x != 0:
if _inputDir.x > 0 && facingDir == FacingDirection.EAST:
facingDir = FacingDirection.EAST
elif inputDir.x < 0 && facingDir == FacingDirection.WEST:
elif _inputDir.x < 0 && facingDir == FacingDirection.WEST:
facingDir = FacingDirection.WEST
else:
facingDir = FacingDirection.SOUTH
else:
facingDir = FacingDirection.SOUTH
elif inputDir.x > 0:
elif _inputDir.x > 0:
facingDir = FacingDirection.EAST
else:
facingDir = FacingDirection.WEST
sprite.animation = FacingDirWalkAnimations[facingDir]
func applyGravity() -> void:
func _applyGravity() -> void:
if !body.is_on_floor():
body.velocity += PHYSICS.GRAVITY * get_process_delta_time()
func applyMovement() -> void:
func _applyMovement() -> void:
if !canMove():
return
@@ -98,7 +102,7 @@ func applyMovement() -> void:
right = right.normalized()
var directionAdjusted = (
forward * inputDir.y + right * inputDir.x
forward * _inputDir.y + right * _inputDir.x
).normalized()
if directionAdjusted.length() <= 0.01:
return
@@ -107,19 +111,38 @@ func applyMovement() -> void:
var targetRot = atan2(directionAdjusted.x, directionAdjusted.z)
rotate.rotation.y = targetRot
body.velocity.x = directionAdjusted.x * SPEED
body.velocity.z = directionAdjusted.z * SPEED
var speed = walkSpeed
if _running:
speed = runSpeed
body.velocity.x = directionAdjusted.x * speed
body.velocity.z = directionAdjusted.z * speed
func applyFriction(delta:float) -> void:
func _applyFriction(delta:float) -> void:
body.velocity.x *= delta * FRICTION
body.velocity.z *= delta * FRICTION
#
# Protected Methods
#
func canMove() -> bool:
return true
#
# Callbacks
#
func _enter_tree() -> void:
_updateSprite()
func _physics_process(delta:float) -> void:
if Engine.is_editor_hint():
return
if !body:
return
applyGravity()
applyFriction(delta)
applyMovement()
applyFacingDir()
body.move_and_slide()
_applyGravity()
_applyFriction(delta)
_applyMovement()
_applyFacingDir()
body.move_and_slide()

38
entity/npc/NPC.gd Normal file
View File

@@ -0,0 +1,38 @@
@tool
class_name NPC extends CharacterBody3D
@export var _movement:NPCMovement
@export var facingDirection:EntityMovement.FacingDirection:
set(value):
if _movement:
_movement.facingDir = value
get:
if _movement:
return _movement.facingDir
return EntityMovement.FacingDirection.SOUTH
@export var walkSpeed:float = 48.0:
set(value):
if _movement:
_movement.walkSpeed = value
get:
if _movement:
return _movement.walkSpeed
return 48.0
@export var runSpeed:float = 64.0:
set(value):
if _movement:
_movement.runSpeed = value
get:
if _movement:
return _movement.runSpeed
return 64.0
func onInteract(player:Player) -> void:
print("Interacted with NPC")
pass
func _enter_tree() -> void:
pass

View File

@@ -1,10 +1,9 @@
[gd_scene load_steps=13 format=3 uid="uid://kabs7mopalmo"]
[gd_scene load_steps=12 format=3 uid="uid://kabs7mopalmo"]
[ext_resource type="Script" uid="uid://crw7ls7t8cwct" path="res://entities/npc/NPC.gd" id="1_00k55"]
[ext_resource type="Script" uid="uid://cmwovncvo1n5o" path="res://entities/npc/NPCTest.gd" id="2_1seh5"]
[ext_resource type="Script" uid="uid://crw7ls7t8cwct" path="res://entity/npc/NPC.gd" id="1_00k55"]
[ext_resource type="Script" uid="uid://b00rxpveu3v4m" path="res://InteractableArea.gd" id="2_x8luf"]
[ext_resource type="Script" uid="uid://tlfthv88ki0y" path="res://entities/npc/NPCMovement.gd" id="3_1seh5"]
[ext_resource type="Texture2D" uid="uid://xx3qp5xh7tgu" path="res://entities/player/Player.png" id="4_x8luf"]
[ext_resource type="Script" uid="uid://tlfthv88ki0y" path="res://entity/npc/NPCMovement.gd" id="3_1seh5"]
[ext_resource type="Texture2D" uid="uid://xx3qp5xh7tgu" path="res://entity/player/Player.png" id="4_x8luf"]
[sub_resource type="BoxShape3D" id="BoxShape3D_1seh5"]
size = Vector3(16, 16, 16)
@@ -63,14 +62,12 @@ animations = [{
[sub_resource type="SphereShape3D" id="SphereShape3D_x8luf"]
radius = 8.5
[node name="NPC" type="CharacterBody3D"]
[node name="NPC" type="CharacterBody3D" node_paths=PackedStringArray("_movement")]
script = ExtResource("1_00k55")
_movement = NodePath("Scripts/NPCMovement")
[node name="Scripts" type="Node" parent="."]
[node name="NPCTest" type="Node" parent="Scripts"]
script = ExtResource("2_1seh5")
[node name="NPCMovement" type="Node" parent="Scripts" node_paths=PackedStringArray("body", "sprite")]
script = ExtResource("3_1seh5")
body = NodePath("../..")
@@ -90,10 +87,10 @@ axis = 1
double_sided = false
texture_filter = 0
sprite_frames = SubResource("SpriteFrames_1seh5")
animation = &"walk_west"
animation = &"walk_south"
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 8.5, 0)
shape = SubResource("SphereShape3D_x8luf")
[connection signal="interactEvent" from="InteractableArea" to="Scripts/NPCTest" method="onInteract"]
[connection signal="interactEvent" from="InteractableArea" to="." method="onInteract"]

View File

@@ -0,0 +1 @@
uid://dda6r22r8eow2

View File

@@ -0,0 +1,2 @@
@tool
class_name NPCMovement extends "res://entity/EntityMovement.gd"

31
entity/player/Player.gd Normal file
View File

@@ -0,0 +1,31 @@
@tool
class_name Player extends CharacterBody3D
@export var _movement:PlayerMovement
@export var facingDirection:EntityMovement.FacingDirection:
set(value):
if _movement:
_movement.facingDir = value
get:
if _movement:
return _movement.facingDir
return EntityMovement.FacingDirection.SOUTH
@export var walkSpeed:float = 48.0:
set(value):
if _movement:
_movement.walkSpeed = value
get:
if _movement:
return _movement.walkSpeed
return 48.0
@export var runSpeed:float = 64.0:
set(value):
if _movement:
_movement.runSpeed = value
get:
if _movement:
return _movement.runSpeed
return 64.0

View File

Before

Width:  |  Height:  |  Size: 237 B

After

Width:  |  Height:  |  Size: 237 B

View File

@@ -3,7 +3,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://xx3qp5xh7tgu"
path.s3tc="res://.godot/imported/Player.png-e32651025a39607688584ad92d58078b.s3tc.ctex"
path.s3tc="res://.godot/imported/Player.png-44a553acafadade6fc26fd4f7692a8d9.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
@@ -11,8 +11,8 @@ metadata={
[deps]
source_file="res://entities/player/Player.png"
dest_files=["res://.godot/imported/Player.png-e32651025a39607688584ad92d58078b.s3tc.ctex"]
source_file="res://entity/player/Player.png"
dest_files=["res://.godot/imported/Player.png-44a553acafadade6fc26fd4f7692a8d9.s3tc.ctex"]
[params]

View File

@@ -1,11 +1,11 @@
[gd_scene load_steps=14 format=3 uid="uid://2ch34sio36nv"]
[ext_resource type="Script" uid="uid://ylmy3nvpirgr" path="res://entities/player/Player.gd" id="1_24gqh"]
[ext_resource type="Script" uid="uid://bwxdv3kxrs4oj" path="res://entities/player/PlayerMovement.gd" id="2_o7et6"]
[ext_resource type="Script" uid="uid://b3nty7pvbo58d" path="res://entities/player/PlayerInteraction.gd" id="3_24gqh"]
[ext_resource type="Script" uid="uid://bdv1fj1pwknrs" path="res://entities/player/PlayerInput.gd" id="4_yjynp"]
[ext_resource type="Script" uid="uid://bdjgvyiacbg28" path="res://entities/player/PlayerCamera.gd" id="5_g3lhm"]
[ext_resource type="Texture2D" uid="uid://xx3qp5xh7tgu" path="res://entities/player/Player.png" id="7_fmb3c"]
[ext_resource type="Script" uid="uid://ylmy3nvpirgr" path="res://entity/player/Player.gd" id="1_24gqh"]
[ext_resource type="Script" uid="uid://bwxdv3kxrs4oj" path="res://entity/player/PlayerMovement.gd" id="2_o7et6"]
[ext_resource type="Script" uid="uid://b3nty7pvbo58d" path="res://entity/player/PlayerInteraction.gd" id="3_24gqh"]
[ext_resource type="Script" uid="uid://bdv1fj1pwknrs" path="res://entity/player/PlayerInput.gd" id="4_yjynp"]
[ext_resource type="Script" uid="uid://bdjgvyiacbg28" path="res://entity/player/PlayerCamera.gd" id="5_g3lhm"]
[ext_resource type="Texture2D" uid="uid://xx3qp5xh7tgu" path="res://entity/player/Player.png" id="7_fmb3c"]
[sub_resource type="SphereShape3D" id="SphereShape3D_4pwj0"]
radius = 8.5
@@ -64,8 +64,9 @@ animations = [{
[sub_resource type="BoxShape3D" id="BoxShape3D_g13of"]
size = Vector3(10, 16, 8)
[node name="Player" type="CharacterBody3D"]
[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("_movement")]
script = ExtResource("1_24gqh")
_movement = NodePath("Scripts/PlayerMovement")
[node name="Scripts" type="Node" parent="."]

View File

@@ -1,13 +1,17 @@
@tool
class_name PlayerCamera extends Node
const CAMERA_PIXELS_PER_UNIT = 1.0
const CAMERA_PIXEL_SCALE = 2.0
const CAMERA_PIXEL_SCALE = 1.0
@export var camera:Camera3D = null
@export var target:Node3D = null
@export var offset:Vector3 = Vector3(0, 0, 16)
@export var offset:Vector3 = Vector3(0, 0, 12)
func _process(delta: float) -> void:
if !camera || !target:
return
# I tried a few things but this is most consistent for both backbuffer and
# framebuffer viewports.
var viewportHeight = get_viewport().get_visible_rect().size.y;

View File

@@ -10,4 +10,4 @@ func _process(delta: float) -> void:
if Input.is_action_just_pressed("interact"):
interaction.interact()
movement.inputDir = Input.get_vector("move_left", "move_right", "move_back", "move_forward").normalized()
movement._inputDir = Input.get_vector("move_left", "move_right", "move_back", "move_forward").normalized()

View File

@@ -1,7 +1,7 @@
[gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://cv8q4cbjyfauh"]
[ext_resource type="Shader" uid="uid://b3vi5kwotike5" path="res://materials/EntityMaterialShader.gdshader" id="1_gsq3s"]
[ext_resource type="Texture2D" uid="uid://xx3qp5xh7tgu" path="res://entities/player/Player.png" id="2_awgof"]
[ext_resource type="Shader" path="res://materials/EntityMaterialShader.gdshader" id="1_gsq3s"]
[ext_resource type="Texture2D" uid="uid://xx3qp5xh7tgu" path="res://entity/player/Player.png" id="2_awgof"]
[resource]
render_priority = 0

View File

@@ -1,4 +1,5 @@
class_name PlayerMovement extends "res://entities/EntityMovement.gd"
@tool
class_name PlayerMovement extends "res://entity/EntityMovement.gd"
func canMove() -> bool:
if PAUSE.isMovementPaused():

0
event/EventItem.gd Normal file
View File

1
event/EventItem.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://c42rc36mudwgh

3
event/EventResource.gd Normal file
View File

@@ -0,0 +1,3 @@
class_name EventResource extends Resource
@export var eventName:String

View File

@@ -0,0 +1 @@
uid://5nyb2g1kghpv

12
map/TestMap.gd Normal file
View File

@@ -0,0 +1,12 @@
extends Node3D
func _ready():
UI.MADTALK.start_dialog("bare_minimum")
func _input(event):
if (
(event is InputEventKey) and (event.pressed) and (not event.echo) and (event.keycode in [KEY_SPACE, KEY_ENTER, KEY_KP_ENTER])
) or (
(event is InputEventMouseButton) and (event.pressed) and (event.button_index == MOUSE_BUTTON_LEFT)
):
UI.MADTALK.dialog_acknowledge()

1
map/TestMap.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://xe6pcuq741xi

View File

@@ -1,15 +1,18 @@
[gd_scene load_steps=4 format=3 uid="uid://d0ywgijpuqy0r"]
[gd_scene load_steps=5 format=3 uid="uid://d0ywgijpuqy0r"]
[ext_resource type="PackedScene" uid="uid://cluuhtfjeodwb" path="res://maps/TestMapBase.tscn" id="1_ox0si"]
[ext_resource type="PackedScene" uid="uid://2ch34sio36nv" path="res://entities/player/Player.tscn" id="2_0d2qr"]
[ext_resource type="PackedScene" uid="uid://kabs7mopalmo" path="res://entities/npc/NPC.tscn" id="3_0vfw4"]
[ext_resource type="Script" uid="uid://xe6pcuq741xi" path="res://map/TestMap.gd" id="1_6ms5s"]
[ext_resource type="PackedScene" uid="uid://cluuhtfjeodwb" path="res://map/TestMapBase.tscn" id="1_ox0si"]
[ext_resource type="PackedScene" uid="uid://2ch34sio36nv" path="res://entity/player/Player.tscn" id="2_0d2qr"]
[ext_resource type="PackedScene" uid="uid://kabs7mopalmo" path="res://entity/npc/NPC.tscn" id="3_0vfw4"]
[node name="TestMap" type="Node3D"]
script = ExtResource("1_6ms5s")
[node name="TestMapBase" parent="." instance=ExtResource("1_ox0si")]
[node name="Player" parent="." instance=ExtResource("2_0d2qr")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14.3947, 1.94879, -13.1025)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 27.142, 1.94879, -59.112)
facingDirection = 1
[node name="NPC" parent="." instance=ExtResource("3_0vfw4")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.30029, 4.06806, 0.563562)

View File

@@ -11,6 +11,7 @@ func _exit_tree() -> void:
push_error("RootScene should not be removed from the scene tree. This is a bug.")
func onSceneChange(newScene:SceneSingleton.SceneType) -> void:
print("overworld", overworld)
remove_child(overworld)
remove_child(initial)

View File

@@ -17,13 +17,15 @@ config/icon="res://icon.svg"
[autoload]
PHYSICS="*res://singletons/GamePhysics.gd"
PAUSE="*res://singletons/Pause.gd"
TRANSITION="*res://singletons/Transition.tscn"
UI="*res://singletons/UI.tscn"
QUEST="*res://singletons/Quest.tscn"
OVERWORLD="*res://singletons/Overworld.gd"
SCENE="*res://singletons/Scene.gd"
PHYSICS="*res://singleton/GamePhysics.gd"
PAUSE="*res://singleton/Pause.gd"
TRANSITION="*res://singleton/Transition.tscn"
UI="*res://singleton/UI.tscn"
QUEST="*res://singleton/Quest.tscn"
OVERWORLD="*res://singleton/Overworld.gd"
SCENE="*res://singleton/Scene.gd"
MadTalkGlobals="*res://addons/madtalk/runtime/MadTalkGlobals.tscn"
ControllerIcons="*res://addons/controller_icons/ControllerIcons.gd"
[debug]
@@ -45,7 +47,7 @@ project/assembly_name="Dawn Godot"
[editor_plugins]
enabled=PackedStringArray("res://addons/controller_icons/plugin.cfg")
enabled=PackedStringArray("res://addons/controller_icons/plugin.cfg", "res://addons/madtalk/plugin.cfg")
[filesystem]

View File

@@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://c8shl8u156rfi"]
[ext_resource type="Script" uid="uid://dfpml5awf5i35" path="res://singletons/Load.gd" id="1_a3iwn"]
[ext_resource type="Script" uid="uid://dfpml5awf5i35" path="res://singleton/Load.gd" id="1_a3iwn"]
[node name="Load" type="Node"]
script = ExtResource("1_a3iwn")

View File

@@ -18,7 +18,7 @@ func _exit_tree() -> void:
TRANSITION.fadeOutEnd.disconnect(onFadeOutEnd)
TRANSITION.fadeInEnd.disconnect(onFadeInEnd)
func _process(delta:float) -> void:
func _process(_delta:float) -> void:
if(!isMapChanging()):
return

View File

@@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://dodd3jx81w40c"]
[ext_resource type="Script" uid="uid://cd4lf5sm2aquv" path="res://singletons/Quest.gd" id="1_u2r0s"]
[ext_resource type="Script" uid="uid://cd4lf5sm2aquv" path="res://singleton/Quest.gd" id="1_u2r0s"]
[node name="Quest" type="Node"]
script = ExtResource("1_u2r0s")

View File

@@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://i4ukelrrsujw"]
[ext_resource type="Script" uid="uid://iu3m73wtjlho" path="res://singletons/Transition.gd" id="1_isjic"]
[ext_resource type="Script" uid="uid://iu3m73wtjlho" path="res://singleton/Transition.gd" id="1_isjic"]
[node name="Transition" type="Control"]
layout_mode = 3

5
singleton/UI.gd Normal file
View File

@@ -0,0 +1,5 @@
class_name UISingleton extends Control
@export var TEXTBOX: VNTextbox
@export var PAUSE: PauseMenu
@onready var MADTALK:Node = $VNTextbox/MadTalk;

View File

@@ -1,7 +1,7 @@
[gd_scene load_steps=4 format=3 uid="uid://baos0arpiskbp"]
[ext_resource type="PackedScene" uid="uid://bkx3l0kckf4a8" path="res://ui/component/VNTextbox.tscn" id="1_1mtk3"]
[ext_resource type="Script" uid="uid://dq3qyyayugt5l" path="res://singletons/UI.gd" id="1_son71"]
[ext_resource type="Script" uid="uid://dq3qyyayugt5l" path="res://singleton/UI.gd" id="1_son71"]
[ext_resource type="PackedScene" uid="uid://c0i5e2dj11d8c" path="res://ui/pause/PauseMenu.tscn" id="2_atyu8"]
[node name="UI" type="Control" node_paths=PackedStringArray("TEXTBOX", "PAUSE")]
@@ -16,9 +16,7 @@ TEXTBOX = NodePath("VNTextbox")
PAUSE = NodePath("PauseMenu")
[node name="PauseMenu" parent="." instance=ExtResource("2_atyu8")]
visible = false
layout_mode = 1
[node name="VNTextbox" parent="." instance=ExtResource("1_1mtk3")]
visible = false
layout_mode = 1

View File

@@ -1,4 +0,0 @@
class_name UISingleton extends Control
@export var TEXTBOX: VNTextbox
@export var PAUSE: PauseMenu

View File

@@ -1,44 +0,0 @@
@tool
class_name AdvancedRichText extends RichTextLabel
@export_multiline var advancedText:String = "":
get():
return advancedText
set(value):
advancedText = value
_parseAdvancedText()
@export var translate:bool = true:
set(value):
translate = value
_parseAdvancedText()
get():
return translate
func _init() -> void:
self._parseAdvancedText()
func _enter_tree() -> void:
self._parseAdvancedText()
func _parseAdvancedText() -> void:
if advancedText.is_empty():
self.text = ""
return
var key = advancedText
if self.translate:
key = tr(key)
self.text = processInputTags(key)
func processInputTags(text:String) -> String:
var regex = RegEx.new()
regex.compile(r"\[input action=(.*?)\](.*?)\[/input\]")
var result = text
for match in regex.search_all(text):
var action = match.get_string(1).to_lower()
var height:int = 32
# var device = get_current_device_type()
# var icon_path = get_icon_for_action(action, device)
var img_tag = "[img height=%d valign=center,center]res://textures/input/%s.tres[/img]" % [ height, action ]
result = result.replace(match.get_string(0), img_tag)
return result

View File

@@ -1,8 +1,9 @@
[gd_scene load_steps=4 format=3 uid="uid://bkx3l0kckf4a8"]
[gd_scene load_steps=5 format=3 uid="uid://bkx3l0kckf4a8"]
[ext_resource type="Theme" uid="uid://dm7ee4aqjr2dl" path="res://ui/UI Theme.tres" id="1_wx4lp"]
[ext_resource type="Script" uid="uid://h8lw23ypcfty" path="res://ui/component/VNTextbox.gd" id="2_uo1gm"]
[ext_resource type="Script" uid="uid://bjj6upgk1uvxd" path="res://ui/component/AdvancedRichText.gd" id="3_m60k3"]
[ext_resource type="Script" uid="uid://c6av3xe4m2ujl" path="res://addons/madtalk/runtime/madtalk_runtime.gd" id="3_2x6s1"]
[ext_resource type="Script" uid="uid://bjj6upgk1uvxd" path="res://ui/component/advancedrichtext/AdvancedRichText.gd" id="3_m60k3"]
[node name="VNTextbox" type="PanelContainer"]
anchors_preset = 12
@@ -15,6 +16,12 @@ grow_vertical = 0
theme = ExtResource("1_wx4lp")
script = ExtResource("2_uo1gm")
[node name="MadTalk" type="Node" parent="."]
script = ExtResource("3_2x6s1")
DialogMainControl = NodePath("..")
DialogMessageBox = NodePath("../MarginContainer")
DialogMessageLabel = NodePath("../MarginContainer/Label")
[node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 2
theme = ExtResource("1_wx4lp")
@@ -27,12 +34,8 @@ theme_override_constants/margin_bottom = 4
layout_mode = 2
theme = ExtResource("1_wx4lp")
bbcode_enabled = true
text = "TEST
TEST
TEST
TEST"
text = "To get through tight spaces, press[input action=down][/input]"
fit_content = true
script = ExtResource("3_m60k3")
advancedText = "TEST
TEST
TEST
TEST"
userText = "To get through tight spaces, press[input action=down][/input]"
finalText = "To get through tight spaces, press[img height=12 valign=center,center]res://ui/input/down.tres[/img]"

View File

@@ -0,0 +1,104 @@
@tool
class_name AdvancedRichText extends RichTextLabel
@export_multiline var userText:String = "" # The text the user is asking for
@export_multiline var finalText:String = "" # The final text after processing (translation, wrapping, etc.)
# Hides the original RichTextLabel text property
func _set(property: StringName, value) -> bool:
if property == "text":
userText = value
_recalcText()
return true
elif property == "richtextlabel_text":
text = value
return true
return false
func _get(property: StringName):
if property == "text":
return userText
elif property == "richtextlabel_text":
return text
return null
@export var translate:bool = true:
set(value):
translate = value
_recalcText()
get():
return translate
@export var smartWrap:bool = true:
set(value):
smartWrap = value
_recalcText()
get():
return smartWrap
func _init() -> void:
_recalcText()
func _enter_tree() -> void:
_recalcText()
self.resized.connect(_recalcText)
func _exit_tree() -> void:
self.resized.disconnect(_recalcText)
func _recalcText() -> void:
if userText.is_empty():
self.richtextlabel_text = ""
return
# Translate if needed
var textTranslated = userText
if self.translate:
textTranslated = tr(textTranslated)
# Replace input bb tags.
var regex = RegEx.new()
regex.compile(r"\[input action=(.*?)\](.*?)\[/input\]")
var inputIconText = textTranslated
for match in regex.search_all(textTranslated):
var action = match.get_string(1).to_lower()
var height:int = get_theme_font_size("normal_font_size")
# var device = get_current_device_type()
# var icon_path = get_icon_for_action(action, device)
var img_tag = "[img height=%d valign=center,center]res://ui/input/%s.tres[/img]" % [ height, action ]
inputIconText = inputIconText.replace(match.get_string(0), img_tag)
# Perform smart wrapping
var wrappedText = inputIconText
if smartWrap:
var unwrappedText = wrappedText.strip_edges()
self.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART;
self.richtextlabel_text = unwrappedText
self.visible_characters = -1;
self.fit_content = true;
var newlineIndexes = [];
# Determine where the wrapped newlines are
var line = 0;
var wasNewLine = false;
for i in range(0, unwrappedText.length()):
var tLine = self.get_character_line(i);
if tLine == line || tLine == -1:
wasNewLine = false
if unwrappedText[i] == "\n":
wasNewLine = true
continue;
if !wasNewLine:
newlineIndexes.append(i);
line = tLine;
# Create fake pre-wrapped text.
wrappedText = "";
for i in range(0, unwrappedText.length()):
if newlineIndexes.find(i) != -1 and i != 0:
wrappedText += "\n";
wrappedText += unwrappedText[i];
finalText = wrappedText
self.richtextlabel_text = wrappedText

View File

@@ -1,6 +1,6 @@
[gd_resource type="Texture2D" script_class="ControllerIconTexture" load_steps=2 format=3 uid="uid://vb20551utmet"]
[ext_resource type="Script" uid="uid://ddxpo5u73ssi2" path="res://addons/controller_icons/objects/ControllerIconTexture.gd" id="1_iw3l5"]
[ext_resource type="Script" uid="uid://cxab4gf8nejc2" path="res://addons/controller_icons/objects/ControllerIconTexture.gd" id="1_iw3l5"]
[resource]
resource_local_to_scene = false
@@ -8,5 +8,6 @@ resource_name = ""
script = ExtResource("1_iw3l5")
path = "debug"
show_mode = 0
force_controller_icon_style = -1
force_type = 0
metadata/_custom_type_script = "uid://ddxpo5u73ssi2"
force_device = 16

View File

@@ -1,12 +1,13 @@
[gd_resource type="Texture2D" script_class="ControllerIconTexture" load_steps=2 format=3 uid="uid://cyfh2wyhh1cjg"]
[ext_resource type="Script" uid="uid://ddxpo5u73ssi2" path="res://addons/controller_icons/objects/ControllerIconTexture.gd" id="1_p6b3a"]
[ext_resource type="Script" uid="uid://cxab4gf8nejc2" path="res://addons/controller_icons/objects/ControllerIconTexture.gd" id="1_p6b3a"]
[resource]
resource_local_to_scene = false
resource_name = ""
script = ExtResource("1_p6b3a")
path = "down"
path = "move_back"
show_mode = 0
force_controller_icon_style = -1
force_type = 0
metadata/_custom_type_script = "uid://ddxpo5u73ssi2"
force_device = 16

View File

@@ -1,12 +1,13 @@
[gd_resource type="Texture2D" script_class="ControllerIconTexture" load_steps=2 format=3 uid="uid://b3ii1cu3mc7jc"]
[ext_resource type="Script" uid="uid://ddxpo5u73ssi2" path="res://addons/controller_icons/objects/ControllerIconTexture.gd" id="1_ngf5d"]
[ext_resource type="Script" uid="uid://cxab4gf8nejc2" path="res://addons/controller_icons/objects/ControllerIconTexture.gd" id="1_ngf5d"]
[resource]
resource_local_to_scene = false
resource_name = ""
script = ExtResource("1_ngf5d")
path = "up"
path = "interact"
show_mode = 0
force_controller_icon_style = -1
force_type = 0
metadata/_custom_type_script = "uid://ddxpo5u73ssi2"
force_device = 16

View File

@@ -1,12 +1,13 @@
[gd_resource type="Texture2D" script_class="ControllerIconTexture" load_steps=2 format=3 uid="uid://thb0gnik8oo3"]
[ext_resource type="Script" uid="uid://ddxpo5u73ssi2" path="res://addons/controller_icons/objects/ControllerIconTexture.gd" id="1_fijpq"]
[ext_resource type="Script" uid="uid://cxab4gf8nejc2" path="res://addons/controller_icons/objects/ControllerIconTexture.gd" id="1_fijpq"]
[resource]
resource_local_to_scene = false
resource_name = ""
script = ExtResource("1_fijpq")
path = "left"
path = "move_left"
show_mode = 0
force_controller_icon_style = -1
force_type = 0
metadata/_custom_type_script = "uid://ddxpo5u73ssi2"
force_device = 16

View File

@@ -1,6 +1,6 @@
[gd_resource type="Texture2D" script_class="ControllerIconTexture" load_steps=2 format=3 uid="uid://byijoyarhygot"]
[ext_resource type="Script" uid="uid://ddxpo5u73ssi2" path="res://addons/controller_icons/objects/ControllerIconTexture.gd" id="1_o0qtj"]
[ext_resource type="Script" uid="uid://cxab4gf8nejc2" path="res://addons/controller_icons/objects/ControllerIconTexture.gd" id="1_o0qtj"]
[resource]
resource_local_to_scene = false
@@ -8,5 +8,6 @@ resource_name = ""
script = ExtResource("1_o0qtj")
path = "pause"
show_mode = 0
force_controller_icon_style = -1
force_type = 0
metadata/_custom_type_script = "uid://ddxpo5u73ssi2"
force_device = 16

View File

@@ -1,12 +1,13 @@
[gd_resource type="Texture2D" script_class="ControllerIconTexture" load_steps=2 format=3 uid="uid://dajlk4u1q8rsp"]
[ext_resource type="Script" uid="uid://ddxpo5u73ssi2" path="res://addons/controller_icons/objects/ControllerIconTexture.gd" id="1_guxqd"]
[ext_resource type="Script" uid="uid://cxab4gf8nejc2" path="res://addons/controller_icons/objects/ControllerIconTexture.gd" id="1_guxqd"]
[resource]
resource_local_to_scene = false
resource_name = ""
script = ExtResource("1_guxqd")
path = "right"
path = "move_right"
show_mode = 0
force_controller_icon_style = -1
force_type = 0
metadata/_custom_type_script = "uid://ddxpo5u73ssi2"
force_device = 16

View File

@@ -1,12 +1,13 @@
[gd_resource type="Texture2D" script_class="ControllerIconTexture" load_steps=2 format=3 uid="uid://blut4glc4n0ck"]
[ext_resource type="Script" uid="uid://ddxpo5u73ssi2" path="res://addons/controller_icons/objects/ControllerIconTexture.gd" id="1_y6k0e"]
[ext_resource type="Script" uid="uid://cxab4gf8nejc2" path="res://addons/controller_icons/objects/ControllerIconTexture.gd" id="1_y6k0e"]
[resource]
resource_local_to_scene = false
resource_name = ""
script = ExtResource("1_y6k0e")
path = "left"
path = "move_left"
show_mode = 0
force_controller_icon_style = -1
force_type = 0
metadata/_custom_type_script = "uid://ddxpo5u73ssi2"
force_device = 16