Hello there;
gdscript doesn’t support variable shadowing, method overloading, or covariant field types, so the closest you can get is a pseudo getter/setter;
extends StateMachine
class_name CharacterStateMachine
var character_state: CharacterState:
get:
return state as CharacterState
set(value):
state = value
in c# you can shadow it new keyword. But it’s kills inheritance chain, you should forward it to parent object
public class CharacterState : State {}
public partial class CharacterStateMachine: StateMachine
{
public new CharacterState State
{
get => (CharacterState)base.State;
set => base.State = value;
}
}
edit: as c# generics can be used
public partial class State: Resource {}
public partial class CharacterState : State {}
public abstract partial class StateMachine<T> : Node where T : State
{
public T State { get; set; }
}
public partial class CharacterStateMachine: StateMachine<CharacterState> {}
only downside you can’t attach open generic objects to scene tree or decorate generic fields with export