Untitled
unknown
plain_text
a year ago
2.7 kB
9
Indexable
class GoToThrowSpotState : MinionState { public override string Name => GoToThrowSpotStateName; public override void Init(IFiniteStateMachine<MinionFSMData> parentFSM, MinionFSMData minFSMData) { base.Init(parentFSM, minFSMData); } public override void Enter() { base.Enter(); if (Mgr.FindClosestNonPrisonerOpponentIndex(Minion.transform.position, Team, out opponentIndex)) { if (hasOpponent = Mgr.GetOpponentInfo(Team, opponentIndex, out opponentInfo)) { Minion.FaceTowards(opponentInfo.Pos); } } } public override void Exit(bool globalTransition) { } public override StateTransitionBase<MinionFSMData> Update() { // Just in case something bad happened if (!Minion.HasBall) { return ParentFSM.CreateStateTransition(CollectBallStateName); } // Check if there is an opponent if (hasOpponent) { // Check the throw selection var selection = ShotSelection.SelectThrow(Minion, opponentInfo, navmask, MaxAllowedThrowPositionError, Time.deltaTime, out var projectileDir, out var projectileSpeed, out var interceptT, out var interceptPos); // If the throw selection is valid, transition to ThrowBallState if (selection == ShotSelection.SelectThrowReturn.DoThrow) { return ParentFSM.CreateStateTransition(ThrowBallStateName); } Vector3 directionToOpponent = (opponentInfo.Pos - Minion.transform.position).normalized; Vector3 newTargetPosition = Minion.transform.position + directionToOpponent * 2; Minion.GoTo(newTargetPosition); } // Check if the minion has reached the target if (Minion.ReachedTarget()) { if (FindRescuableTeammate(out var m)) { return ParentFSM.CreateStateTransition<MinionScript>(RescueStateName, m, true); } else { return ParentFSM.CreateStateTransition(ThrowBallStateName); } } return null; } }
Editor is loading...
Leave a Comment