private Vector3[] GenerateDirPathToTarget(MovementMode mode, AITargeter source, AITargeter target) { if (mode == MovementMode.AdditiveSetForward) { return new Vector3[1] { (target.transform.position - source.transform.position) / 10 } } ; else if (mode == MovementMode.AdditiveToTransform) { return new Vector3[1] { source.transform.InverseTransformDirection(target.transform.position - source.transform.position) / 10 } } ; else if (mode == MovementMode.SetToForward) { return(CircleMotion.GeneratePtToPtMotionOnForw(source, target, 16)); } else { Debug.Log("Unsupported mode. [PathfindToTargetMotion]" + mode); } return(new Vector3[0]); }
public void OnSpawned(AITargeter other) { spawner = other; if (_stats) { _stats.OnSpawned(other.transform.root.GetComponent <FactionAccess>().faction); } }
public override NodeResult Execute() { // Point is simply data AITargeter target = (AITargeter)source; target.moving.AttachPoints(mode, point); return(NodeResult.Success); }
internal static AITargeter FindClosestEnemy(AITargeter aiTargeter) { FactionAccess fa = FindClosestEnemy(aiTargeter.transform.position, aiTargeter.stats.faction); if (fa != null) { return(fa.GetComponent <AITargeter>()); } return(null); }
private Vector3[] GenerateDirPathToTarget(MovementMode mode, AITargeter source, AITargeter target) { if (mode == MovementMode.SetToForward) { return(CircleMotion.GeneratePtToPtMotionOnForw(source, target, 16)); } else { Debug.Log("Unsupported mode. [MoveToEnemy]" + mode); } return(new Vector3[0]); }
public bool InstantFailChecks(AITargeter s) { if (Faction.GetMoney(s) < cost) { return(true); } else { Faction.UseMoney(s, cost); } return(false); }
public override NodeResult Execute() { AITargeter aiSource = source as AITargeter; if (aiSource.moving.IsAlmostIdle || aiSource.moving.IsIdle) { //Vector3 dir = point; // Point is simply data AITargeter target = (AITargeter)source; target.moving.Attach(mode, point); return(NodeResult.Success); } return(NodeResult.Failure); }
public override NodeResult Execute() { AITargeter aiSource = source as AITargeter; if (FactionUnits.NoEnemies((source as AITargeter).stats)) { return(NodeResult.Failure); } targeter = FactionUnits.FindClosestEnemy(source as AITargeter); if (Vector3.Distance(targeter.transform.position, aiSource.transform.position) < range) { return(NodeResult.Success); } return(NodeResult.Failure); }
public override NodeResult Execute() { if (FactionUnits.NoEnemies((source as AITargeter).stats)) { return(NodeResult.Failure); } if (!(source as AITargeter).moving.IsIdle) { return(NodeResult.Failure); } targeter = FactionUnits.FindClosestEnemy(source as AITargeter); (source as AITargeter).moving.Attach(mode, GenerateDirPathToTarget(mode, (source as AITargeter), targeter)); return(NodeResult.Success); }
public override NodeResult Execute() { KeyCheck(); AITargeter s = source as AITargeter; float t = times[s]; if (Time.time > t) { Transform tr = Instantiate((Transform)bullet.GetValue(), s.transform.position, s.transform.rotation); tr.GetComponent <AITargeter>().OnSpawned(s.GetComponentInParent <TreeBehaviour>()); //tr.GetComponent<AITargeter>().OnSpawned(s); t = Time.time + (float)rate.GetValue(); } times[source as AITargeter] = t; return(NodeResult.Success); }
internal static Vector3[] GeneratePtToPtMotionOnForw(AITargeter source, AITargeter target, int points) { Vector3[] pts = new Vector3[points + 1]; Vector3 finalDir = target.transform.position - source.transform.position; pts[points] = finalDir; float angle = Vector3.Angle(source.transform.forward, finalDir); float angleRad = angle / 360 * 2 * Mathf.PI; for (int i = 0; i < points; i++) { Vector3 rot = Vector3.RotateTowards(source.transform.forward, finalDir, angleRad / points * i, 0); pts[i] = rot; //Vector3 rot = Vector3.up + Vector3.up - axis; } return(pts); }
public override NodeResult Execute() { AITargeter aiSource = source as AITargeter; AITargeter s = Spawner.GetSpawnerOfSource(source as AITargeter); if (s) { axis = s.transform.forward; } else { Debug.LogError("Missing spawner source."); return(NodeResult.Failure); } (source as AITargeter).moving.Attach(mode, CircleMotion.GenerateCircleOfDirections(aiSource.transform.position, s.transform.position, size, pointsDetail, axis)); return(NodeResult.Success); }
public override NodeResult Execute() { KeyCheck(); AITargeter s = source as AITargeter; float t = times[s]; if (Time.time > t) { Vector3[] pts = CircleMotion.GenerateCircleOfDirections(1, this.pts); for (int i = 0; i < this.pts; i++) { Transform b = Instantiate((Transform)bullet.GetValue(), s.transform.position, new Quaternion()); b.up = pts[i]; } t = Time.time + (float)rate.GetValue(); } times[source as AITargeter] = t; return(NodeResult.Success); }
/// <summary> /// Gets who spawned this object. /// Null if none or destroyed. /// </summary> /// <param name="source"></param> /// <returns></returns> internal static AITargeter GetSpawnerOfSource(AITargeter source) { // get tree beh on self and it should have prestored spawner. return(source.GetComponentInParent <TreeBehaviour>().spawner); }