Beispiel #1
0
 public SwarmFireDetails(swarmTargetType _targetType, int[] _fireWeapons, int _firings = 1, float _fireTargetVariance = 0)
 {
     this.targetType         = _targetType;
     this.fireWeapons        = _fireWeapons;
     this.fireTargetVariance = _fireTargetVariance;
     this.firings            = _firings;
 }
Beispiel #2
0
    public IEnumerator FireProjectile(FireStream fireStream, swarmTargetType targetType, int firings)
    {
        if (fireStream.isBeam)
        {
            //for beam weapons
            //first pre-fire beam. Display marker which grows for the fireRate length
            //after pre-fire, fireBeam
            GameObject preFirePrefab = Resources.Load("beam_pre_fire_frigate") as GameObject;
            GameObject newPreFireObj = Instantiate(preFirePrefab) as GameObject;
            newPreFireObj.GetComponent <SpriteRenderer> ().color = new Color(newPreFireObj.GetComponent <SpriteRenderer> ().color.r, newPreFireObj.GetComponent <SpriteRenderer> ().color.g, newPreFireObj.GetComponent <SpriteRenderer> ().color.b, 0.5f);
            newPreFireObj.transform.parent        = this.transform;
            newPreFireObj.transform.localPosition = preFirePrefab.transform.position + fireStream.offset;
            LeanTween.scaleX(newPreFireObj, 8f, fireStream.fireRate);
            yield return(new WaitForSeconds(fireStream.fireRate));

            Destroy(newPreFireObj);

            GameObject newProjectileObj = Instantiate(fireStream.projectile.prefab) as GameObject;
            newProjectileObj.transform.parent        = this.transform;
            newProjectileObj.transform.localPosition = newProjectileObj.transform.position + fireStream.offset;
            Vector3 size = newProjectileObj.GetComponent <Renderer>().bounds.size;
            yield return(new WaitForSeconds(fireStream.fireRate));

            Destroy(newProjectileObj);
        }
        else
        {
            //for projectiles - missles and bullets
            for (int i = 1; i <= firings; i++)
            {
                GameObject newProjectileObj = Instantiate(fireStream.projectile.prefab) as GameObject;
                newProjectileObj.transform.position = transform.position + fireStream.offset;
                newProjectileObj.GetComponent <Projectile> ().angle           = fireStream.angleOffset;
                newProjectileObj.GetComponent <Projectile> ().enemyProjectile = true;
                newProjectileObj.GetComponent <Projectile> ().targetType      = targetType;


                if (targetType == swarmTargetType.atPlayer)
                {
                    Vector3 playerTarget = computeFireTarget(fireStream.offset);
                    newProjectileObj.GetComponent <Projectile> ().dumbTarget = playerTarget;
                }

                if (fireStream.spread > 0f)
                {
                    newProjectileObj.GetComponent <Projectile> ().angle = fireStream.angleOffset + 45 + Random.Range(-fireStream.spread, fireStream.spread);
                }

                yield return(new WaitForSeconds(fireStream.fireRate));
            }
        }
    }
Beispiel #3
0
    private static List <SwarmPathAction> Circle(float moveSpeed, float moveVariance, swarmTargetType targetType)
    {
        List <SwarmPathAction> actions = new List <SwarmPathAction> ();

        /*
         * actions.Add (
         *      new SwarmPathAction (new SwarmMoveDetails (
         *              new Vector3(-4f,5,0)
         *              , moveSpeed, moveVariance))
         * );
         */

        Vector3[] bezierVectors = new Vector3[4];
        bezierVectors [0] = new Vector3(-4, 5, 0);       //StartPoint
        bezierVectors [1] = new Vector3(4, 1, 0);        //EndControl
        bezierVectors [2] = new Vector3(-4, 1, 0);       //StartControl
        bezierVectors [3] = new Vector3(4, 5, 0);        //EndPoint

        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    bezierVectors
                                    , moveSpeed, moveVariance))
            );

        actions.Add(
            new SwarmPathAction(new SwarmFireDetails(
                                    targetType
                                    , new int[1] {
            0
        }, 1))
            );

        bezierVectors     = new Vector3[4];
        bezierVectors [0] = new Vector3(4, 5, 0);
        bezierVectors [1] = new Vector3(-4, 9, 0);
        bezierVectors [2] = new Vector3(4, 9, 0);
        bezierVectors [3] = new Vector3(-4, 5, 0);

        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    bezierVectors
                                    , moveSpeed, moveVariance))
            );

        actions.Add(
            new SwarmPathAction(new SwarmFireDetails(
                                    targetType
                                    , new int[1] {
            0
        }, 1))
            );

        return(actions);
    }
Beispiel #4
0
    private static List <SwarmPathAction> Diamond(float moveSpeed, float moveVariance, swarmTargetType targetType)
    {
        List <SwarmPathAction> actions = new List <SwarmPathAction> ();

        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(-4f, 5, 0)
                                    , moveSpeed, moveVariance))
            );


        actions.Add(
            new SwarmPathAction(new SwarmFireDetails(
                                    targetType
                                    , new int[1] {
            0
        }, 1))
            );


        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(0, 0, 0)
                                    , moveSpeed, moveVariance))
            );

        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(4f, 5, 0)
                                    , moveSpeed, moveVariance))
            );


        actions.Add(
            new SwarmPathAction(new SwarmFireDetails(
                                    targetType
                                    , new int[1]  {
            0
        }, 1))
            );


        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(0, 9, 0)
                                    , moveSpeed, moveVariance))
            );

        return(actions);
    }
Beispiel #5
0
    public static Swarm GenerateSwarmWithShape(shipType type, int size, float moveSpeed, float moveVariance, float spawnVariance, swarmTargetType targetType, swarmActionShape shape)
    {
        List <SwarmPathAction> actions = new List <SwarmPathAction> ();
        List <Object>          enemies = new List <Object> ();
        Object parent = null;

        Vector3 start = new Vector3(-7, 11, 0);

        switch (shape)
        {
        case swarmActionShape.figureEight:
            actions = FigureEight(moveSpeed, moveVariance, targetType);
            break;

        case swarmActionShape.diamond:
            actions = Diamond(moveSpeed, moveVariance, targetType);
            break;

        case swarmActionShape.circle:
            actions = Circle(moveSpeed, moveVariance, targetType);
            break;

        case swarmActionShape.laces:
            actions = Laces(moveSpeed, moveVariance, targetType);
            break;

        case swarmActionShape.arcswoop:
            actions = ArcSwoop(moveSpeed, moveVariance, targetType);
            break;
        }

        //check for errors, incompatabailities:
        foreach (SwarmPathAction action in actions)
        {
            if (action.moveDetails != null)
            {
                if (action.moveDetails.moveActionType == swarmMoveActionType.bezier && action.moveDetails.moveTargetVariance != 0)
                {
                    //	throw new System.ArgumentException("Swarm Path includes a bezier curve with non-zero moveTargetVariance");
                }
            }
        }

        for (int i = 0; i < size; i++)
        {
            enemies.Add(
                Resources.Load(type.ToString())
                );
        }

        if (enemies.Count == 1)
        {
            enemies.Add(
                Resources.Load(shipType.dummy.ToString())
                );
            parent = enemies[1];
        }

        return(new Swarm(enemies, actions, start, spawnVariance, parent));
    }
Beispiel #6
0
    private static List <SwarmPathAction> FigureEight(float moveSpeed, float moveVariance, swarmTargetType targetType)
    {
        List <SwarmPathAction> actions = new List <SwarmPathAction> ();

        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(-4f, 5, 0)
                                    , moveSpeed, moveVariance))
            );

        actions.Add(
            new SwarmPathAction(new SwarmFireDetails(
                                    targetType
                                    , new int[1]  {
            0
        }, 1))
            );

        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(-2f, 2.5f, 0)
                                    , moveSpeed, moveVariance))
            );
        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(0, 5, 0)
                                    , moveSpeed, moveVariance))
            );
        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(2, 7.5f, 0)
                                    , moveSpeed, moveVariance))
            );
        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(4, 5, 0)
                                    , moveSpeed, moveVariance))
            );

        actions.Add(
            new SwarmPathAction(new SwarmFireDetails(
                                    targetType
                                    , new int[1]  {
            0
        }, 1))
            );

        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(2, 2.5f, 0)
                                    , moveSpeed, moveVariance))
            );
        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(0, 5, 0)
                                    , moveSpeed, moveVariance))
            );
        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(-2f, 7.5f, 0)
                                    , moveSpeed, moveVariance))
            );

        return(actions);
    }
Beispiel #7
0
    private static List <SwarmPathAction> Laces(float moveSpeed, float moveVariance, swarmTargetType targetType)
    {
        List <SwarmPathAction> actions = new List <SwarmPathAction> ();

        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(-4f, 9, 0)
                                    , moveSpeed, moveVariance))
            );

        actions.Add(
            new SwarmPathAction(new SwarmFireDetails(
                                    targetType
                                    , new int[1]  {
            0
        }, 1))
            );

        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(4f, 8, 0)
                                    , moveSpeed, moveVariance))
            );

        actions.Add(
            new SwarmPathAction(new SwarmFireDetails(
                                    targetType
                                    , new int[1]  {
            0
        }, 1))
            );

        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(-3f, 7, 0)
                                    , moveSpeed, moveVariance))
            );

        actions.Add(
            new SwarmPathAction(new SwarmFireDetails(
                                    targetType
                                    , new int[1]  {
            0
        }, 1))
            );

        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(3f, 6, 0)
                                    , moveSpeed, moveVariance))
            );

        actions.Add(
            new SwarmPathAction(new SwarmFireDetails(
                                    targetType
                                    , new int[1]  {
            0
        }, 1))
            );

        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(-2f, 5, 0)
                                    , moveSpeed, moveVariance))
            );

        actions.Add(
            new SwarmPathAction(new SwarmFireDetails(
                                    targetType
                                    , new int[1]  {
            0
        }, 1))
            );

        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(2f, 4, 0)
                                    , moveSpeed, moveVariance))
            );

        actions.Add(
            new SwarmPathAction(new SwarmFireDetails(
                                    targetType
                                    , new int[1]  {
            0
        }, 1))
            );

        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(-1f, 3, 0)
                                    , moveSpeed, moveVariance))
            );

        actions.Add(
            new SwarmPathAction(new SwarmFireDetails(
                                    targetType
                                    , new int[1]  {
            0
        }, 1))
            );

        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(1f, 2, 0)
                                    , moveSpeed, moveVariance))
            );

        actions.Add(
            new SwarmPathAction(new SwarmFireDetails(
                                    targetType
                                    , new int[1]  {
            0
        }, 1))
            );

        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(0, 1, 0)
                                    , moveSpeed, moveVariance))
            );

        actions.Add(
            new SwarmPathAction(new SwarmFireDetails(
                                    targetType
                                    , new int[1]  {
            0
        }, 1))
            );

        return(actions);
    }
Beispiel #8
0
    private static List <SwarmPathAction> ArcSwoop(float moveSpeed, float moveVariance, swarmTargetType targetType)
    {
        List <SwarmPathAction> actions = new List <SwarmPathAction> ();

        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(-4f, 9, 0)
                                    , moveSpeed, moveVariance))
            );

        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    new Vector3(-4f, 7, 0)
                                    , moveSpeed, moveVariance))
            );

        Vector3[] bezierVectors = new Vector3[4];
        bezierVectors [0] = new Vector3(-4, 7, 0);
        bezierVectors [1] = new Vector3(4, 9, 0);
        bezierVectors [2] = new Vector3(-4, 5, 0);
        bezierVectors [3] = new Vector3(4, 7, 0);

        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    bezierVectors
                                    , moveSpeed, moveVariance))
            );

        bezierVectors     = new Vector3[4];
        bezierVectors [0] = new Vector3(4, 7, 0);
        bezierVectors [1] = new Vector3(-4, 0, 0);
        bezierVectors [2] = new Vector3(4, 0, 0);
        bezierVectors [3] = new Vector3(-4, 7, 0);

        actions.Add(
            new SwarmPathAction(new SwarmMoveDetails(
                                    bezierVectors
                                    , moveSpeed, moveVariance))
            );

        return(actions);
    }