public void Patrol(AIBrain brain) { if (currentNode == -1) { currentNode = Random.Range(0, path.points.Length); brain.MoveTo(path.points[currentNode]); return; } Vector3 target = path.points[currentNode].position; float dist = Vector3.Distance(gameObject.transform.position, target); if (dist < path.radius) { if (Random.Range(0, 100) < path.reverseChance) { forwards = !forwards; } if (forwards) { currentNode++; } else { currentNode--; } currentNode = currentNode % path.points.Length; brain.MoveTo(path.points[currentNode], true); } }
public override AIAction Execute(AIBrain brain) { if (npcTarget == null) { Evaluate(brain); } brain.target = npcTarget; //Debug.Log("Executing Power: " + name + " Ch:" + npcTarget.name); Character caster = brain.character; caster.target = brain.target; if (!WithinRange(caster)) { brain.MoveTo(caster.target.transform); brain.countDown = 0.5f; brain.closingRange = range; return(null); } if (CanUse(brain.character)) { UpdateAction(brain); } return(this); }
public override AIAction Execute(AIBrain brain) { string msg = "+MV:"; GameObject target = null; switch (follow) { case FollowTarget.Player: target = GetPlayer(); break; case FollowTarget.Target: target = brain.character.target.gameObject; break; } if (target) { Vector3 dir = brain.character.transform.position - target.transform.position; dir.y = 0; dir.Normalize(); Vector3 targetPoint = target.transform.position + dir * distance; brain.MoveTo(targetPoint); msg += "(" + (int)targetPoint.x + "," + (int)targetPoint.z + ")"; } brain.AddDebugMsg(msg); return(this); }
// activate the power using AI protected void OnDoPower(AIBrain brain) { Character caster = brain.character; brain.MoveTo(caster.transform); OnStart(caster); // instant powers release the key immediately. Others, we let energy or duration end it. if (IsInstant()) { OnEnd(caster); } }
// AI Utility functions protected void OnUpdateRanged(AIBrain brain) { Character caster = brain.character; Character target = brain.target; caster.target = target; if (target == null) { return; } if (!WithinRange(caster)) { brain.MoveTo(target.transform); brain.countDown = 1.0f; brain.closingRange = range; } else { OnDoPower(brain); } }