//private void UpdateState_Patrol() { // if (_lastState != _state) { // // Init Patrol // _patrolPointIndex = FindNearestPatrolPointIndex(); // _lastState = _state; // } // float toPoint = MoveTowards(patrolPoints.points[_patrolPointIndex].position); // if (Mathf.Abs(toPoint) <= behaviourSettings.patrolPointDistance) { // _patrolPointIndex++; // if (_patrolPointIndex >= patrolPoints.points.Count) { // _patrolPointIndex = 0; // } // } // if (_isSuspicious) { // state = EnemyState.INVESTIGATE; // } //} //private void UpdateState_Investigate(float deltaTime) { // if (_lastState != _state) { // // Init investigate // _investigateWaitTimer = behaviourSettings.maxInvestigateWaitTime; // _lastState = _state; // } // float xDiff = DistanceXTo(_investigationPointWorld); // if (Mathf.Abs(xDiff) > behaviourSettings.investigateDistance) { // MoveTowards(xDiff); // } else { // _investigateWaitTimer -= deltaTime; // } // if (_canSeePlayer) { // state = EnemyState.CHASE; // } else if (_isSuspicious) { // _investigateWaitTimer = 0f; // } else if (_investigateWaitTimer <= 0f) { // state = EnemyState.PATROL; // } //} //private void UpdateState_Chase(float deltaTime) { // if (_lastState != _state) { // // Init chase // _chaseWaitTimer = behaviourSettings.maxChaseWaitTime; // _lastState = _state; // } // if (_canSeePlayer) { // _chaseWaitTimer = behaviourSettings.maxChaseWaitTime; // float xDiff = DistanceXTo(_investigationPoint); // if (Mathf.Abs(xDiff) > behaviourSettings.investigateDistance) { // MoveTowards(xDiff); // } else { // // kill // } // } else { // float xDiff = DistanceXTo(_investigationPoint); // if (Mathf.Abs(xDiff) > behaviourSettings.investigateDistance) { // MoveTowards(xDiff); // } else { // if (_chaseWaitTimer > 0f) { // _chaseWaitTimer -= deltaTime; // if (_chaseWaitTimer <= 0f) { // state = EnemyState.PATROL; // } // } // } // } //} private void SetInvestigatePoint(Vector2 point) { //_investigationPointLevel = navController.GetLevelIndexFromWorldY(point.y); //_investigationPointX = point.x; //_investigationPointWorld = navController.GetWorldPosition(_investigationPointLevel, _investigationPointX); SimpleNav2DPoint origin = navController.GetNavPoint(transform.position); SimpleNav2DPoint target = navController.GetNavPoint(point); _navSteps = navController.GetNavSteps(origin, target); }
public Stack <SimpleNav2DStep> GetNavSteps(SimpleNav2DPoint origin, SimpleNav2DPoint target) { // Create a set of steps to get from origin to target List <SimpleNav2DStep> steps = new List <SimpleNav2DStep>(); int stepLevel = origin.levelIndex; float xPosition = origin.xPosition; while (stepLevel != target.levelIndex) { if (stepLevel > target.levelIndex) { // find stairs down int stairsDownIndex = GetNearestStairsIndexOnLevelByTop(stepLevel, xPosition); Stairs stairsDown = stairs[stairsDownIndex]; // add step to move to stairs top steps.Add(new SimpleNav2DStep { targetXPosition = stairsDown.topPoint.position.x }); // add step to move down stairs steps.Add(new SimpleNav2DStep { climbDownStairs = true, targetStairs = stairsDown }); stepLevel--; } else { // find stairs up int stairsUpIndex = GetNearestStairsIndexOnLevelByBottom(stepLevel, xPosition); Stairs stairsUp = stairs[stairsUpIndex]; // add step to move to stairs bottom steps.Add(new SimpleNav2DStep { targetXPosition = stairsUp.bottomPoint.position.x }); // add step to move up stairs steps.Add(new SimpleNav2DStep { climbUpStairs = true, targetStairs = stairsUp }); stepLevel++; } } steps.Add(new SimpleNav2DStep { targetXPosition = target.xPosition }); steps.Reverse(); return(new Stack <SimpleNav2DStep>(steps)); }
public void SetNavTarget(Vector2 point) { lastOriginPoint = navController.GetNavPoint(transform.position); lastNavPoint = navController.GetNavPoint(point); navSteps = navController.GetNavSteps(lastOriginPoint, lastNavPoint); }