GDScript модульность - PullRequest
       38

GDScript модульность

0 голосов
/ 09 марта 2020

Можно ли модулировать в 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 в этом случае. Можете ли вы объяснить, как / почему это происходит? Как я могу преодолеть это?

Если эта ошибка не появится, я думаю, что модульность будет работать (так, как я себе это представляю).

...