@startuml namespace FSM { class CharacterStateMachine { -CharacterStateFactory _stateFactory -CharacterBaseState _currentState +Rigidbody2D Rigidbody2D <<readonly>> +CharacterInput Input <<readonly>> +Character Character <<readonly>> +CharacterStatus Status <<readonly>> +bool IsLogging -InitializeStateFactory() +ChangeState(CharacterBaseState changedState) -InitializeStateMachine(Vector3 respawnPos) -OnAttack() -OnAiming() -OnThrowItem() -OnConsumeItem() -OnDiscardItem() -OnDeath() -OnActionAnimCompleted() -Log(string msg) } CharacterStateMachine --> Core.Character Core.Character --> Core.CharacterStatus CharacterStateMachine --> CharacterStateFactory CharacterStateMachine --> CharacterBaseState note right of CharacterStateMachine::IsLogging This member is for debugging. This member can active(inactive) state machine's log message. end note note right of CharacterStateMachine::"Log(string msg)" This method is for debugging. The state machine frequently outputs this method so I added this method to disable log message. end note } namespace FSM.States { abstract class CharacterBaseState { #CharacterStateMachine StateMachine #CharacterStateFactory Factory #CharacterBaseState(CharacterStateMachine stateMachine, CharacterStateFactory factory) +{abstract}EnterState() +{abstract}UpdateState() +{abstract}FixedUpdateState() +{abstract}ExitState() +{abstract}CheckSwitchStates() } class CharacterStateFactory { -Dictionary<CharacterMoveType, CharacterBaseState> _moveStates -Dictionary<CharacterActionType, CharacterBaseState> _actionStates +CharacterStateFactory(CharacterStateMachine stateMachine) +CharacterBaseState Static() +CharacterBaseState Walk() +CharacterBaseState Run() +CharacterBaseState Sneak() +CharacterBaseState SneakStatic() +CharacterBaseState ThrowItem() +CharacterBaseState ConsumeItem() +CharacterBaseState DiscardItem() +CharacterBaseState Attack() +CharacterBaseState Death() +CharacterBaseState Spectate() } } namespace FSM.States.MoveStates { abstract class CharacterMoveState { -Rigidbody2D _rigidbody2D #Move(float moveSpeed) } CharacterMoveState --|> FSM.States.CharacterBaseState class CharacterRunState { -float _runSpeed } CharacterRunState --|> CharacterMoveState class CharacterWalkState { -float _walkSpeed } CharacterWalkState --|> CharacterMoveState class CharacterSneakState { -float _sneakSpeed } CharacterSneakState --|> CharacterMoveState class CharacterSneakStaticState { -float _enteredSneakStaticStateTime } CharacterSneakStaticState --|> CharacterMoveState class CharacterStaticState { float _enteredStaticStateTime } CharacterStaticState --|> CharacterMoveState } namespace FSM.States.ActionStates { class CharacterActionState { } CharacterActionState --|> FSM.States.CharacterBaseState class CharacterAttackState { -Character _character -bool HasLineOfSight(Vector3 origin, Vector3 destination) -T GetClosestTransform<T>(Vector3 originPos, List<T> others, bool requireLineOfSight = true) where T : Component -AttackTrapObjects() -AttackOtherPlayers() -List<T> GetDamageableObjectsInAttackRange<T>(Vector3 attackPoint, Func<T, bool> filter = null) -float GetMeleeDamage(CharacterDirectionState myCharacterDir, CharacterDirectionState targetCharacterDir) -Vector3 GetAttackPoint() -Vector2 GetAttackDirectionVector2(CharacterDirectionState myCharacterLookDir, float distance) } CharacterAttackState --|> CharacterActionState CharacterConsumeItemState --|> CharacterActionState CharacterDeathState --|> CharacterActionState CharacterDiscardItemState --|> CharacterActionState CharacterThrowItemState --|> CharacterActionState CharacterSpectateState --|> CharacterActionState } namespace FSM.Type { enum CharacterMoveType { None Static Walk Run Sneak SneakStatic End } enum CharacterActionType { None ThrowItem ConsumeItem DiscardItem Attack Death Spectate End } } @enduml
Decode URL
Submit
amiga
aws-orange
black-knight
bluegray
blueprint
cerulean-outline
cerulean
crt-amber
crt-green
cyborg-outline
cyborg
hacker
lightgray
mars
materia-outline
materia
metal
mimeograph
minty
plain
reddress-darkblue
reddress-darkgreen
reddress-darkorange
reddress-darkred
reddress-lightblue
reddress-lightgreen
reddress-lightorange
reddress-lightred
sandstone
silver
sketchy-outline
sketchy
spacelab
spacelab-white
superhero-outline
superhero
toy
united
vibrant
🎉 Discover the future PlantUML Web Editor! 🚀
PNG
SVG
ASCII Art