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]);
 }
Пример #2
0
 public void OnSpawned(AITargeter other)
 {
     spawner = other;
     if (_stats)
     {
         _stats.OnSpawned(other.transform.root.GetComponent <FactionAccess>().faction);
     }
 }
Пример #3
0
    public override NodeResult Execute()
    {
        // Point is simply data
        AITargeter target = (AITargeter)source;

        target.moving.AttachPoints(mode, point);
        return(NodeResult.Success);
    }
Пример #4
0
    internal static AITargeter FindClosestEnemy(AITargeter aiTargeter)
    {
        FactionAccess fa = FindClosestEnemy(aiTargeter.transform.position, aiTargeter.stats.faction);

        if (fa != null)
        {
            return(fa.GetComponent <AITargeter>());
        }
        return(null);
    }
Пример #5
0
 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);
    }
Пример #8
0
    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);
    }
Пример #9
0
    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);
    }
Пример #10
0
    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);
    }
Пример #12
0
    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);
    }
Пример #14
0
 /// <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);
 }