Можно ли модулировать в GDScript?
Я имею в виду, что у меня есть класс player
с переменным вводом типа IInput
, например:
Player.gd:
extends KinematicBody
var input = load("res://Scripts/Inputs/PlayerInput.gd").new()
func _physics_process(delta):
if input.is_down("left_trigger"): speed = sprintSpeed
else: speed = runSpeed
Где "res://Scripts/Inputs/PlayerInput.gd"
будет выглядеть так
extends "res://Scripts/Inputs/IInput.gd"
class_name PlayerInput
var controlTranslatinos = {"left_stick_up" : "move_up",
"left_stick_down" : "move_down",
"left_stick_left" : "move_left",
"left_stick_right" : "move_right",
"right_stick_up" : "rotate_up",
"right_stick_down" : "rotate_down",
"right_stick_left" : "rotate_left",
"right_stick_right" : "rotate_right",
"x" : "attack",
"left_trigger" : "defend",
"a" : "jump",
"right_trigger" : "sprint"}
func pressure(controlName):
var translatedControl = controlTranslatinos[controlName]
var preasure = Input.get_action_strength(translatedControl)
return preasure
func is_down(controlName):
return Input.is_action_pressed(controlTranslatinos[controlName])
и где "res: //Scripts/Inputs/IInput.gd" будет выглядеть так:
extends Node
class_name IInput
const controls = [ "move_up", "move_down", "move_left", "move_right",
"rotate_up", "rotate_down", "rotate_left", "rotate_right",
"attack", "defend", "jump", "sprint" ]
func pressure(controlName):
return 0
func is_down(controlName):
return false
Цель изменить вход актера на класс AIInput
и вернуться к PlayerInput по требованию. Это также было бы хорошо для других вещей.
Возможно ли реализовать это другим способом?
Ошибка в `PlayerInput.gd`
Сначала ошибка строка PlayerInput
, говорящая: `Сценарий не полностью загружен (циклическая c предварительная загрузка?):" res: //Scripts/Inputs/IInput.gd "
Я получаю, что предварительная загрузка cycli c будет Я имею в виду, но я не понимаю, как происходит циклическая загрузка c в этом случае. Можете ли вы объяснить, как / почему это происходит? Как я могу преодолеть это?
Если эта ошибка не появится, я думаю, что модульность будет работать (так, как я себе это представляю).