public override bool TickAction() { if (fgoRequest == null) { if (Time.time > attackFinishTimestamp) { return(false); } return(true); } else { LineOfSight sight = attackAI.gameObject.GetComponentInChildren <LineOfSight> (); if (fgoRequest.DistanceToObject() > sight.radius) { return(false); // abort since the object is too far away } if (fgoRequest.TickAction()) { return(true); } else { fgoRequest = null; StartAttack(); return(true); } } }
public AttackRequest(float priority, AttackAI ai, GameObject targetObject) : base(priority) { attackAI = ai; objectToAttack = targetObject; // check if we are in range float attackRange = MovingObjectStats.GetAttackRangeForObject(ai.gameObject); MoveAI moveAI = ai.GetComponent <MoveAI> (); fgoRequest = new FollowGameObjectRequest(0.5f, moveAI, attackRange); fgoRequest.targetObject = objectToAttack; }
public override void StartAction() { if (fgoRequest != null && fgoRequest.IsInRange()) { fgoRequest = null; StartAttack(); } else { fgoRequest.StartAction(); } }
public override MoveRequest GetRequest() { if (gameObjectToFollow == null) { return(null); } else { float attackRange = MovingObjectStats.GetAttackRangeForObject(gameObject); FollowGameObjectRequest request = new FollowGameObjectRequest(0.5f, this, attackRange); request.targetObject = gameObjectToFollow; if (request.IsInRange()) { return(null); } return(request); } }
public override MoveRequest GetRequest() { if (path == null || pathIndex >= path.Length) { return(null); } FollowGameObjectRequest request = new FollowGameObjectRequest(0.5f, this, minDistanceToEachObject); request.targetObject = path [pathIndex]; if (request.IsInRange()) { if (++pathIndex < path.Length) { request.targetObject = path [pathIndex]; } else { return(null); } } return(request); }