Exemplo n.º 1
0
    private void SecondaryWeaponControl()
    {
        if (secondaryTarget != null)
        {
            for (int i = 0; i < secondaryParam.ShootingPoint.Length; i++)
            {
                if (secondaryParam.weaponType == WeaponType.Laser)
                {
                    GameObject muzzle = Instantiate(secondaryParam.weaponObject, secondaryParam.ShootingPoint[i].transform.position, Quaternion.identity) as GameObject;
                    BeamScript script = muzzle.GetComponent <BeamScript>();
                    muzzle.transform.parent = this.transform;
                    script.Target           = secondaryTarget;
                    script.From             = secondaryParam.ShootingPoint[i];
                    script.lifeTime         = secondaryParam.lifeTime;
                    script.damage           = secondaryParam.damage[secondaryParam.level - 1] + additional_secondaryDamage;
                }
                else if (secondaryParam.weaponType == WeaponType.Missile)
                {
                    GameObject    lunch  = Instantiate(secondaryParam.weaponObject, secondaryParam.ShootingPoint[i].transform.position, Quaternion.identity) as GameObject;
                    MissileScript script = lunch.GetComponent <MissileScript>();
                    script.Target     = secondaryTarget;
                    script.velocity   = secondaryParam.missile_velocity;
                    script.alignSpeed = secondaryParam.missile_alignSpeed;
                    script.damage     = secondaryParam.damage[secondaryParam.level - 1] + additional_secondaryDamage;
                    script.lifeTime   = secondaryParam.missile_lifeTime;
                }
            }

            secondaryTarget   = null;
            secondaryInterval = secondaryParam.shootingInterval[secondaryParam.level - 1] - additional_secondaryRate;
        }
    }
Exemplo n.º 2
0
 void OnTriggerStay2D(Collider2D collider)
 {
     if (collider.tag == "Player")
     {
         if (MainScript.Player.FuelLevel < 100)
         {
             MainScript.Player.FuelLevel += refuelingSpeed;
             if (!restSound.isPlaying && !startSound.isPlaying)
             {
                 restSound.Play();
             }
         }
         if (MainScript.Player.FuelLevel > 100)
         {
             if (!restSound.isPlaying)
             {
                 restSound.pitch = 1.08f;
                 restSound.Play();
             }
         }
     }
     if ((collider.tag == "Missile"))
     {
         FuelTank fuelTank = MainScript.fuelTanks.Find(x => x.GameObject.Equals(gameObject));
         Missile  missile  = MainScript.missiles.Find(x => x.GameObject.Equals(collider.gameObject));
         MainScript.Player.Points += score;
         GameObject smallExplosion = GameObject.Instantiate(Resources.Load("Prefabs/SmallExplosionPrefab", typeof(GameObject))) as GameObject;
         smallExplosion.transform.position = new Vector2(fuelTank.GameObject.transform.position.x, fuelTank.GameObject.transform.position.y);
         Destroy(smallExplosion, 1);
         Destroy(fuelTank.GameObject);
         MainScript.fuelTanks.Remove(fuelTank);
         MissileScript.CheckTypeOfMissile(ref missile);
     }
 }
    void OnTriggerEnter2D(Collider2D other)
    {
        if (string.Equals(other.gameObject.tag, "jpublic"))
        {
            MissileScript scr = other.gameObject.GetComponent <MissileScript> ();
            if (string.Equals(this.colorString, scr.colorString))
            {
                score += 100;

                textNameObject.GetComponent <TextNameScript> ().phrase(other.gameObject.GetComponent <MissileScript> ().controlPrefab.GetComponent <HFTGamepad> ().Name);

                GameObject part = Instantiate(explosion);
                part.GetComponent <Transform> ().localScale = 0.5f * new Vector3(1, 1, 1);
                part.GetComponent <Transform> ().position   = GetComponent <Transform> ().position;
                part.GetComponent <PartStartColor> ().c0    = GetComponent <SpriteRenderer> ().color;
                part.GetComponent <PartStartColor> ().c1    = GetComponent <SpriteRenderer> ().color;
                part.GetComponent <PartStartColor> ().InitiateColor();

                AudioSource asrc = GameObject.Find("Camera").GetComponent <AudioSource> ();
                if (!asrc.isPlaying)
                {
                    asrc.clip   = sndPoints;
                    asrc.volume = 1f;
                    asrc.Play();
                }

                scr.controlPrefab.GetComponent <PlayerControlToPrefab> ().desactiver();
                Destroy(other.gameObject);
            }
        }
    }
    public void activer()
    {
        actif = true;

        if (string.Equals(gp.Name, "v"))
        {
            objectControlled = VaisseauScene;
            scrv             = VaisseauScene.GetComponent <VaisseauScript> ();
            move             = ShipMove;
        }
        else
        {
            if (!string.Equals(gp.Name, "nope"))
            {
                objectControlled = Instantiate(MissilePrefab);
                objectControlled.GetComponent <MissileScript> ().controlPrefab = this.gameObject;

                int     i = UnityEngine.Random.Range(0, 5);
                Vector3 c = selectRandomColor();
                c        = c / 255;
                gp.Color = new Color(c.x, c.y, c.z);
                objectControlled.GetComponentInChildren <SpriteRenderer> ().color = new Color(c.x, c.y, c.z);
                scrm             = objectControlled.GetComponent <MissileScript> ();
                scrm.colorString = colorString;
                move             = RocketMove;
            }
            else
            {
                objectControlled = null;
                scrm             = null; scrv = null;
                move             = null;
            }
        }
    }
Exemplo n.º 5
0
    //================================================================================================
    //MISSILE FIRE
    //================================================================================================
    void Missile()
    {
        //spawns a clone projectile with a target location
        Vector3    dir = transform.TransformDirection(Vector3.forward);
        RaycastHit hit;

        //NEW TARGET
        if (Physics.Raycast(transform.position, dir, out hit, maxRange))
        {
            Vector3 offset = new Vector3(0, 0, 0);
            clone   = Instantiate(projectile, transform.position + offset, transform.rotation) as GameObject;
            target  = hit.collider.gameObject;//assigns target
            missile = (MissileScript)clone.GetComponent(typeof(MissileScript));
            missile.SetTarget(target);
            prevTarget = target;
            Debug.DrawLine(gameObject.transform.position, hit.point, Color.red, 1.0F);
        }
        //CURRENT TARGET
        else if (target != null)
        {// if target not detected but target not null fire
            Vector3 offset = new Vector3(0, 0, 0);
            clone   = Instantiate(projectile, transform.position + offset, transform.rotation) as GameObject;
            missile = (MissileScript)clone.GetComponent(typeof(MissileScript));
            missile.SetTarget(prevTarget);
        }
    }
    IEnumerator FireMissiles()
    {
        //line.enabled = true;
        fireMissile = true;

        while (fireMissile)
        {
            //line.material.mainTextureOffset = new Vector2(0, Time.time);

            if (Time.time >= nextTimeToFireMissile)
            {
                //line.SetPosition(0, transform.position);


                nextTimeToFire = Time.time + 1f / 500;

                Ray ray = new Ray(transform.position, transform.forward);

                //RaycastHit hit;

                Vector3 rot = transform.rotation.eulerAngles;

                rot = new Vector3(rot.x, rot.y, rot.z);

                GameObject    go            = Instantiate(missilePrefab, transform.position - new Vector3(0, 2, 0), Quaternion.Euler(rot));
                MissileScript missileScript = go.GetComponent <MissileScript>();

//				if(Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, 200f))
//				{
//					//line.SetPosition(1, hit.point);
//
////					if(hit.transform.gameObject != null)
////					{
////						missileScript.target = hit.point;
////					}
//				}
//				else
//				{
//					//line.SetPosition(1, ray.GetPoint(200f));
//					//missileScript.target = ray.GetPoint(missileRange);
//				}

                currCharge -= 20f;

                if (currCharge <= 0)
                {
                    currCharge  = 0f;
                    fireMissile = false;
                }
            }

            yield return(null);

            yield return(new WaitForSeconds(0.5f));
        }

        //line.enabled = false;
    }
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        MissileScript missile = (MissileScript)target;

        if (GUILayout.Button("Test Launch"))
        {
            missile.LaunchAt(BattleManager.instance.AllActors() [0].TileMovement.occupying, true);
        }
    }
Exemplo n.º 8
0
    void Update()
    {
        if (GameMgr.Instance.GameState == 1)
        {
            return;
        }

        if (GameMgr.Instance.GameState == 2)
        {
            GameOverScr.SetActive(true);
            GOMsgText.text = "Survived for " + curTimeSec + " Sec \nEnemies Killed " +
                             GameMgr.Instance.enemiesKilled + "\nEscaped from " +
                             GameMgr.Instance.missleLaunched + " Missiles\n\n Hope enjoyed the game";
            return;
        }

        curTime += Time.deltaTime;
        if (curTime >= 1.0f)
        {
            curTimeSec++;
            curTime = 0;
            UpdateUI();
            isMissleLaunched = false;
        }

        if (curTimeSec % 2 == 0 && !isMissleLaunched)
        {
            isMissleLaunched = true;
            GameObject    missile = GetMissile();
            MissileScript ms      = missile.GetComponent <MissileScript>() as MissileScript;
            missile.transform.position = Enemy_02.transform.position + Enemy_02.transform.forward;
            missile.transform.LookAt(Player_01.transform.position);
            missile.transform.Rotate(new Vector3(0, 270, 0));
            ms.Activate(Enemy_02.transform.forward, 0);
            GameMgr.Instance.missleLaunched++;
        }

        /*
         * if(curTimeSec % 3 == 0 && !isMissleLaunched)
         * {
         *      isMissleLaunched = true;
         *      GameObject missile = GetMissile();
         *      MissileScript ms = missile.GetComponent<MissileScript>() as MissileScript;
         *      missile.transform.position = Enemy_01.transform.position;
         *      missile.transform.LookAt(Player_01.transform.position);
         *      missile.transform.Rotate(new Vector3(0, 270, 0));
         *      ms.Activate(Enemy_01.transform.forward, 0);
         *      missleLaunched++;
         * }
         */
        transform.position = new Vector3(Player_01.transform.position.x, transform.position.y, Player_01.transform.position.z);
    }
Exemplo n.º 9
0
    public void LaunchMissileAndSetup(GameObject missilePrefab)
    {
        rangedAttacking = true;
        GameObject missileCopy = Instantiate(missilePrefab);

        missileCopy.transform.position = GetComponent <TileMovement> ().avatar.position;
        MissileScript missile = missileCopy.GetComponent <MissileScript> ();


        //this means miss
        if (lastAttack.resultingEffect == null)
        {
            List <ATTile> tiles = lastAttack.TargetActor().TileMovement.occupying.TilesWithinRange(1);
            missile.LaunchAt(tiles [Random.Range(0, tiles.Count)]);
        }
        else
        {
            missile.LaunchAt(lastAttack.TargetActor().TileMovement.occupying);
        }

//		UIManager.instance.cameraController.LockOn (missile.transform);

        GenericWeapon unequipped = lastAttack
                                   .actor
                                   .CharSheet
                                   .Unequip(lastAttack.WeaponUsed) as GenericWeapon;

        missile.OnConnectedWithTarget += (MissileScript self) => {
            AttackAnimationHitMoment();
            rangedAttacking = false;
            AttackAnimationEnded();
            if (lastAttack.TypeChoice.IsRanged() && lastAttack.WeaponUsed.IsThrown())
            {
                self.targetTile.AddItemToGround(unequipped);
            }
            //Add item to ground of the last tile hit.
        };

        missile.OnHitBlocker += (MissileScript self, ATTile blocker) => {
            lastAttack.resultingEffect = null;
            AttackAnimationHitMoment();
            rangedAttacking = false;
            AttackAnimationEnded();
            if (lastAttack.TypeChoice.IsRanged() && lastAttack.WeaponUsed.IsThrown())
            {
                self.previousHitTile.AddItemToGround(unequipped);
            }
            //Add item to ground of the player
        };

        lastMissileScript = missile;
    }
 public override void actionOnActive()
 {
     if (equipment.getTarget())
     {
         GameObject    missile       = Instantiate(missileKinetic, shootPoint.transform.position, shootPoint.transform.rotation, shootPoint.transform);
         MissileScript missileScript = missile.GetComponent <MissileScript>();
         missile.transform.parent = null;
         missile.transform.Rotate(0f, 90f, 0f);
         missileScript.setOwner(equipment.getOwner());
         missileScript.setTarget(equipment.getTarget());
         audio.Play();
     }
 }
Exemplo n.º 11
0
    void OnTriggerEnter2D(Collider2D collider)
    {
        if ((collider.tag == "Terrain" || collider.tag == "Finish") && gameObject.name != "SpacePlanePrefab(Clone)")
        {
            int rotation   = 180;
            var enemySpeed = MainScript.enemies.Find(x => x.GameObject.Equals(gameObject)).Speed *= -1;
            gameObject.GetComponent <Rigidbody2D>().velocity = new Vector2(enemySpeed * MainScript.Player.DefaultSpeed, 0);
            if (enemySpeed < 0 && gameObject.name == "TankPrefab(Clone)")
            {
                rotation += rotation;
            }
            if (enemySpeed > 0 && gameObject.name == "RedEnemyPrefab(Clone)")
            {
                rotation += rotation;
            }
            if (enemySpeed > 0 && gameObject.name == "RedEnemyPrefab(Clone)")
            {
                rotation += rotation;
            }
            gameObject.transform.localRotation = Quaternion.Euler(0, rotation, 0);
        }

        if (collider.tag == "Missile" || collider.tag == "Player")
        {
            Enemy enemy = MainScript.enemies.Find(x => x.GameObject.Equals(gameObject));
            if (collider.tag == "Player")
            {
                if (MainScript.Player.CurrentHealth >= 1)
                {
                    playerHit.GetComponent <AudioSource>().Play();
                }
                enemy.Health = 0f;
            }
            else
            {
                Missile missile;
                missile = MainScript.missiles.Find(x => x.GameObject.GetComponent <Collider2D>().Equals(collider));
                float damage = missile.Damage;
                enemy.Health -= damage;
                MissileScript.CheckTypeOfMissile(ref missile);
                whiteSprite();
                isWhite = true;
            }
            if (enemy.Health <= 0)
            {
                MainScript.KillEnemy(enemy);
            }
        }
    }
Exemplo n.º 12
0
 void Update()
 {
     if (inRange && GameMgr.Instance.GameState == 0)
     {
         nextMissileTime -= Time.deltaTime;
         if (nextMissileTime < 0)
         {
             nextMissileTime = 0.5f;
             GameObject    missile = GetMissile();
             MissileScript ms      = missile.GetComponent <MissileScript>() as MissileScript;
             missile.transform.position = new Vector3(transform.position.x, 5, transform.position.z);
             missile.transform.LookAt(Player_01.transform.position);
             missile.transform.Rotate(new Vector3(0, 270, 0));
             ms.Activate(transform.forward, 1);
             GameMgr.Instance.missleLaunched++;
             Debug.Log("missile Launch" + missile.transform.position);
         }
     }
 }
Exemplo n.º 13
0
    protected void FireMissile()
    {
        CameraShaker.Instance.ShakeCamera(2 * cameraShakeShoot, 2f);
        AudioManager.Instance.SpawnSound("MissileLaunchSound", missileStart.transform, false, false, false, this is PlayerScript ? 0.7f : 0.6f);
        GameObject    missileGO = GameManager.Instance.MissilePool.GetObject(missileStart.position, tower.transform.rotation);
        MissileScript missile   = missileGO.GetComponent <MissileScript>();

        if (this is PlayerScript)
        {
            if (WaveSpawner.Instance.CurrentWaveTanks.Count > 0)
            {
                missile.Init(WaveSpawner.Instance.CurrentWaveTanks[Random.Range(0, WaveSpawner.Instance.CurrentWaveTanks.Count)].GetComponent <TankScript>(), this);
            }
            else
            {
                missile.Init(null, this);
            }
        }
        else
        {
            missile.Init(FindObjectOfType <PlayerScript>(), this);
        }
    }
Exemplo n.º 14
0
    public void FindScript()
    {
        Component tempScript = currentObjects[globalIndex].GetComponent(typeof(MonoBehaviour));

        if (tempScript.GetType().Equals(typeof(TerroristScript)))
        {
            TerroristScript tempTerrorist = (TerroristScript)currentObjects[globalIndex].GetComponent(typeof(TerroristScript));
            tempTerrorist.KillToDeath();
        }
        if (tempScript.GetType().Equals(typeof(JungleCommandoScript)))
        {
            JungleCommandoScript tempJungle = (JungleCommandoScript)currentObjects[globalIndex].GetComponent(typeof(JungleCommandoScript));
            tempJungle.KillToDeath();
        }
        if (tempScript.GetType().Equals(typeof(ZombieScript)))
        {
            ZombieScript tempZombie = (ZombieScript)currentObjects[globalIndex].GetComponent(typeof(ZombieScript));
            tempZombie.KillToDeath();
        }
        if (tempScript.GetType().Equals(typeof(LightScript)))
        {
            LightScript tempLight = (LightScript)currentObjects[globalIndex].GetComponent(typeof(LightScript));
            tempLight.KillToDeath();
        }
        if (tempScript.GetType().Equals(typeof(ArmyScript)))
        {
            ArmyScript tempArmy = (ArmyScript)currentObjects[globalIndex].GetComponent(typeof(ArmyScript));
            tempArmy.KillToDeath();
        }
        if (tempScript.GetType().Equals(typeof(MissileScript)))
        {
            MissileScript tempMissile = (MissileScript)currentObjects[globalIndex].GetComponent(typeof(MissileScript));
            tempMissile.KillToDeath();
        }

        Killed(currentObjects[globalIndex]);
    }
Exemplo n.º 15
0
    void Shoot(Transform target)
    {
        //cannon turret
        if (bulletTurret)
        {
            GameObject   thisBullet   = Instantiate(bullet, firePoint.position, firePoint.rotation);
            BulletScript bulletScript = thisBullet.GetComponent <BulletScript>();
            if (bulletScript != null)
            {
                bulletScript.setTargetTo(target);
                bulletScript.setDamage(damage);
            }
        }

        //missile turret
        else if (missileTurret)
        {
            int missileNum = 1;
            if (upgraded3)
            {
                missileNum = 4;
            }
            for (int i = 0; i < missileNum; i++)
            {
                GameObject    thisMissile   = Instantiate(missile, firePoint.position + Random.insideUnitSphere * 5, firePoint.rotation);
                MissileScript missileScript = thisMissile.GetComponent <MissileScript>();
                if (missileScript != null)
                {
                    missileScript.setTargetTo(target);
                    missileScript.setDamage(damage, aoeDamage);
                }
            }
        }

        //pulse turret
        else if (pulseTurret)
        {
            Collider[] objectsHit = Physics.OverlapSphere(firePoint.position, range);
            foreach (Collider c in objectsHit)
            {
                if (c.tag.Equals(enemyTag))
                {
                    c.gameObject.GetComponent <EnemyAIScript>().takeDamage(damage);
                }
            }
        }

        //freeze turret
        else if (freezeTurret)
        {
            GameObject enemy = target.gameObject;
            enemy.GetComponent <EnemyAIScript>().slow(slowDuration, slowPrentageAmount);
            enemy.GetComponent <EnemyAIScript>().takeDamage(damage);

            laserEffect.SetPosition(0, firePoint.position);
            laserEffect.SetPosition(1, target.position);
        }

        //death laser
        else if (DeathLaserTurret)
        {
            GameObject enemy = target.gameObject;
            enemy.GetComponent <EnemyAIScript>().takeDamage(damage);

            if (upgraded2)
            {
                enemy.GetComponent <EnemyAIScript>().slow(slowDuration, slowPrentageAmount);
            }

            laserEffect.SetPosition(0, firePoint.position);
            laserEffect.SetPosition(1, target.position);
        }

        //firing effect
        if (fireEffect != null)
        {
            GameObject fireParticles;
            if (upgraded3 && upgradedFireEffect != null)
            {
                fireParticles = Instantiate(upgradedFireEffect, firePoint.position, Quaternion.LookRotation(target.position - transform.position));
            }
            else
            {
                fireParticles = Instantiate(fireEffect, firePoint.position, Quaternion.LookRotation(target.position - transform.position));
            }
            Destroy(fireParticles, 1f);
        }
    }
Exemplo n.º 16
0
    // Update is called once per frame
    void Update()
    {
        ChangeRotation();
        if (IsMovePlayer == true)
        {
            //敵の向きによって撃つ方向を変える
            switch (Direction)
            {
            case "Right":
                if (EnemyName == "Laser")
                {
                    if (CountLaser == 3)
                    {
                        var obj = Instantiate(LaserPrefab, transform.position + new Vector3(1.0f, 0.0f, 0.0f), Quaternion.identity);
                        obj.transform.right = transform.right;
                        CountLaser          = 0;
                    }
                    CountLaser++;
                }
                if (EnemyName == "Missile")
                {
                    if (activeMissile != null)
                    {
                        break;
                    }
                    var obj = Instantiate(MissilePrefab, transform.position + new Vector3(2.0f, 0.0f, 0.0f), Quaternion.identity);
                    obj.transform.right = transform.right;
                    activeMissile       = obj.GetComponent <MissileScript>();
                }
                break;

            case "Down":
                if (EnemyName == "Laser")
                {
                    if (CountLaser == 3)
                    {
                        var obj = Instantiate(LaserPrefab, transform.position + new Vector3(0.0f, -1.0f, 0.0f), Quaternion.identity);
                        obj.transform.right = transform.right;
                        CountLaser          = 0;
                    }
                    CountLaser++;
                }
                if (EnemyName == "Missile")
                {
                    if (activeMissile != null)
                    {
                        break;
                    }
                    var obj = Instantiate(MissilePrefab, transform.position + new Vector3(0.0f, -2.0f, 0.0f), Quaternion.identity);
                    obj.transform.right = transform.right;
                    activeMissile       = obj.GetComponent <MissileScript>();
                }
                break;

            case "Left":
                if (EnemyName == "Laser")
                {
                    if (CountLaser == 3)
                    {
                        var obj = Instantiate(LaserPrefab, transform.position + new Vector3(-1.0f, 0.0f, 0.0f), Quaternion.identity);
                        obj.transform.right = transform.right;
                        CountLaser          = 0;
                    }
                    CountLaser++;
                }
                if (EnemyName == "Missile")
                {
                    if (activeMissile != null)
                    {
                        break;
                    }
                    var obj = Instantiate(MissilePrefab, transform.position + new Vector3(-2.0f, 0.0f, 0.0f), Quaternion.identity);
                    obj.transform.right = transform.right;
                    activeMissile       = obj.GetComponent <MissileScript>();
                }
                break;

            case "Up":
                if (EnemyName == "Laser")
                {
                    if (CountLaser == 3)
                    {
                        var obj = Instantiate(LaserPrefab, transform.position + new Vector3(0.0f, 1.0f, 0.0f), Quaternion.identity);
                        obj.transform.right = transform.right;
                        CountLaser          = 0;
                    }
                    CountLaser++;
                }
                if (EnemyName == "Missile")
                {
                    if (activeMissile != null)
                    {
                        break;
                    }
                    var obj = Instantiate(MissilePrefab, transform.position + new Vector3(0.0f, 2.0f, 0.0f), Quaternion.identity);
                    obj.transform.right = transform.right;
                    activeMissile       = obj.GetComponent <MissileScript>();
                }
                break;
            }
            IsMovePlayer = false;
        }
    }
Exemplo n.º 17
0
    // Update is called once per frame
    void Update()
    {
        GameObject[,] circuitArray = circuitBoardScript.componentArray;

        int numThrusters = 0;

        foreach (GameObject obj in circuitArray)
        {
            if (obj != null)
            {
                if (obj.name.Contains("powersupply"))
                {
                }
                else
                {
                    ShipComponent compScript = obj.GetComponent("ShipComponent") as ShipComponent;
                    if (compScript._powerLevel > 0)
                    {
                        if (obj.name.Contains("thruster"))
                        {
                            //Debug.Log ("MOVEFORWARD");
                            numThrusters += 1;
                        }
                        else if (obj.name.Contains("gun"))
                        {
                            //Debug.Log ("SHOOT");
                        }
                    }
                }
            }
        }


        //Movement


        sumOfForces();


        GameObject thruster1 = null;
        GameObject thruster2 = null;

        bool thruster1Active = false;
        bool thruster2Active = false;

        foreach (GameObject obj in circuitBoardScript.componentArray)
        {
            if (obj != null)
            {
                if (obj.name.Contains("thruster"))
                {
                    if (thruster1 == null)
                    {
                        thruster1 = obj;
                    }
                    else if (thruster2 == null)
                    {
                        thruster2 = obj;
                    }
                    Thruster thrusterScript = obj.GetComponent("Thruster") as Thruster;
                    if (thrusterScript._powerLevel > 0)
                    {
                        if (obj == thruster1)
                        {
                            thruster1Active = true;
                        }
                        else if (obj == thruster2)
                        {
                            thruster2Active = true;
                        }
                    }
                }
            }
        }

        centerofMass = computeCenterOfMass();

        if (thruster1Active && !thruster2Active)
        {
            //rotate right
            shipAngle -= shipAngularVelocity * Time.deltaTime;
        }
        else if (!thruster1Active && thruster2Active)
        {
            shipAngle += shipAngularVelocity * Time.deltaTime;
            //rotate left
        }

        foreach (GameObject compObj in componentArray)
        {
            if (compObj != null)
            {
                //Vector2 differenceVector = new Vector2( compObj.transform.position.x - centerofMass.x,
                //                                       compObj.transform.position.y - centerofMass.y);

                //Vector2 newVector = rotateVector(differenceVector, shipAngle);

                //float angleDiff = Mathf.Atan2(differenceVector.y, differenceVector.x);

                Vector2 blockVector = new Vector2(compObj.transform.position.x - centerofMass.x,
                                                  compObj.transform.position.y - centerofMass.y);


                //Debug.Log ("Block Vector: " + blockVector);

                float angleDifference = shipAngle - compObj.transform.localEulerAngles.z;

                float tempAngle = (angleDifference * Mathf.Deg2Rad);

                compObj.transform.localEulerAngles = new Vector3(0, 0, shipAngle);


                float rotatedX = (Mathf.Cos(tempAngle) * (blockVector.x)) -
                                 (Mathf.Sin(tempAngle) * (blockVector.y)) + centerofMass.x;

                float rotatedY = (Mathf.Sin(tempAngle) * (blockVector.x)) +
                                 (Mathf.Cos(tempAngle) * (blockVector.y)) + centerofMass.y;



                compObj.transform.position = new Vector2(rotatedX, rotatedY);
            }
        }


        if (thruster1Active && thruster2Active)
        {
            float tempAngle = (Mathf.Deg2Rad * shipAngle) + Mathf.PI / 2;
            if (shipVelocity.magnitude < _maxSpeed)
            {
                shipVelocity.x = shipVelocity.x + Mathf.Cos(tempAngle) * acceleration * Time.deltaTime;
                shipVelocity.y = shipVelocity.y + Mathf.Sin(tempAngle) * acceleration * Time.deltaTime;
            }
        }



        shipVelocity.x *= coeffKineticFriction;
        shipVelocity.y *= coeffKineticFriction;



        //Check collisions

        GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");



        //Bounds boundingBox = renderer.bounds;
        //Vector3 extents = boundingBox.extents;
        //Rect boundingRect = new Rect(boundingBox.center.x-extents.x, boundingBox.center.y-extents.y,
        //                            extents.x*1.8f, extents.y*1.8f);

        //Debug.Log (enemies[0].name);

        foreach (GameObject enemy in enemies)
        {
            Bounds  tileBoundingBox = enemy.renderer.bounds;
            Vector3 tileExtents     = tileBoundingBox.extents;

            Rect tileBoundingRect = new Rect(tileBoundingBox.center.x - tileExtents.x,
                                             tileBoundingBox.center.y - tileExtents.y, tileExtents.x * 1.15f, tileExtents.y * 1.35f);


            foreach (GameObject block in componentArray)
            {
                if (block != null)
                {
                    Bounds  blockBoundingBox = block.renderer.bounds;
                    Vector3 blockExtents     = blockBoundingBox.extents;

                    Rect blockBoundingRect = new Rect(blockBoundingBox.center.x - blockExtents.x,
                                                      blockBoundingBox.center.y - blockExtents.y,
                                                      blockExtents.x * 1.6f, blockExtents.y * 1.6f);

                    bool isIntersecting = doesIntersect(blockBoundingRect, tileBoundingRect);

                    if (isIntersecting)
                    {
                        Debug.Log("COLLISION");
                        shipVelocity.x *= .95f;
                        shipVelocity.y *= .95f;
                        EnemyBehavior enBehScript = enemy.GetComponent("EnemyBehavior") as EnemyBehavior;

                        enBehScript.currentSpeed *= 0.9995f;
                    }
                }
            }
        }



        foreach (GameObject compObj in componentArray)
        {
            if (compObj != null)
            {
                compObj.transform.position = new Vector2(compObj.transform.position.x + shipVelocity.x,
                                                         compObj.transform.position.y + shipVelocity.y);
            }
        }

        Vector2 newLoc = new Vector2(shipVelocity.x,
                                     shipVelocity.y);

        followship.moveSelf(newLoc.x, newLoc.y);
        circuitBoardScript.translateAll(newLoc.x, newLoc.y);

        GameObject console = GameObject.FindGameObjectWithTag("Console");

        console.transform.Translate(new Vector3(newLoc.x, newLoc.y, 0));

        this.transform.position = new Vector3(centerofMass.x, centerofMass.y, 0);
        //Debug.Log (shipVelocity);


        //shipVelocity.x -= (coeffKineticFriction * acceleration);
        //shipVelocity.y -= (coeffKineticFriction * acceleration);

        this.transform.localEulerAngles = new Vector3(0, 0, shipAngle);



        //Debug.Log (this.transform.position);



        //Firing
        foreach (GameObject obj in circuitArray)
        {
            if (obj != null)
            {
                if (obj.name.Contains("gun"))
                {
                    Gun gunScript = obj.GetComponent("Gun") as Gun;
                    if (gunScript._powerLevel > 0)
                    {
                        if (gunScript.interval <= 0.0)
                        {
                            GameObject mirror = componentArray[gunScript.index_Row, gunScript.index_Column];

                            GameObject missile = (GameObject)Instantiate(missilePrefab,
                                                                         new Vector3(mirror.transform.position.x,
                                                                                     mirror.transform.position.y,
                                                                                     0),
                                                                         mirror.transform.rotation);

                            MissileScript missileScript = missile.GetComponent("MissileScript") as MissileScript;
                            missileScript.angleVector = missile.transform.localEulerAngles;

                            gunScript.interval = gunScript.intervalBase;


                            AudioSource.PlayClipAtPoint(missileShot, Camera.main.transform.position);
                        }

                        gunScript.interval -= Time.deltaTime;
                    }
                }
            }
        }
    }
    public CastRoutine SpellRangedAttack(SpellAttackEffector hit,
                                         MissileScript.MissileAnimationName missileName,
                                         SpellAttackEffector crit = null,
                                         SpellAttackEffector miss = null)
    {
        return((AT.Battle.Actor caster,AT.Battle.Action cast,List <AT.ATTile> targets) => {
            GameObject prefab = MissileAnimationPrefabDispenser.instance.GetAnimationPrefabByName(missileName);

            foreach (AT.ATTile target in targets)
            {
                AttackSituation sit = new AttackSituation(caster.CharSheet,target.FirstOccupant.CharSheet,cast);

                List <AT.Character.Effect.GenericEffect> resultingEffects = null;

                ResultType result = sit.GetResult();
                switch (result)
                {
                case ResultType.HIT:
                    resultingEffects = hit.Invoke(cast,target);
                    break;

                case ResultType.CRITICAL_HIT:
                    if (crit != null)
                    {
                        resultingEffects = crit.Invoke(cast,target);
                    }
                    break;

                case ResultType.MISS:
                    if (miss != null)
                    {
                        resultingEffects = miss.Invoke(cast,target);
                    }
                    break;

                case ResultType.CRITICAL_MISS:
                    //nothing
                    break;
                }


                CharacterCastingAnimation castingAnims = caster.GetComponent <CharacterCastingAnimation>();
                if (castingAnims != null)
                {
                    castingAnims.SetupAndDoCastAnimation(cast);
                    castingAnims.OneShotSpellRelease((animationInst) => {
                        GameObject copy = Instantiate(prefab);
                        copy.transform.position = caster.transform.position;
                        MissileScript missile = copy.GetComponent <MissileScript>();

                        missile.LaunchAt(target,true);
                        //Safe to not worry about unsubbing, thanks to garbage cleanup
                        missile.OnConnectedWithTarget += (MissileScript self) => {
                            if (resultingEffects != null)
                            {
                                foreach (AT.Character.Effect.GenericEffect effect in resultingEffects)
                                {
                                    if (target.FirstOccupant != null)
                                    {
                                        effect.ApplyTo(target.FirstOccupant.CharSheet,cast);
                                    }
                                }
                            }
                            //This assumes only one missile.   Needs a "Checkin of sorts, to conditionally check on finished"
                            cast.CallOnFinished();
                        };
                    });                     //ToBe ATOCIJL
                }
                else
                {
                    GameObject copy = Instantiate(prefab);
                    copy.transform.position = caster.transform.position;
                    MissileScript missile = copy.GetComponent <MissileScript>();
                    missile.LaunchAt(target.transform);
                    //Safe to not worry about unsubbing, thanks to garbage cleanup
                    missile.OnConnectedWithTarget += (MissileScript self) => {
                        if (resultingEffects != null)
                        {
                            foreach (AT.Character.Effect.GenericEffect effect in resultingEffects)
                            {
                                effect.ApplyTo(target.FirstOccupant.CharSheet,cast);
                            }
                        }
                        //This assumes only one missile.   Needs a "Checkin of sorts, to conditionally check on finished"
                        cast.CallOnFinished();
                    };
                }
            }
        });
    }
Exemplo n.º 19
0
    //FIRING MECHANISM
    private void Fire()
    {
        RaycastHit hit;

        //LASER HITSCAN
        if (typeWeapon == weaponType.laser)
        {
            Vector3 dir = transform.TransformDirection(Vector3.forward);
            if (Physics.Raycast(transform.position, dir, out hit, maxRange))
            {
                // Debug.Log(hit.transform.name + " found!");// declares if object was found
                //  print("Found a target game object distance of " + hit.distance);//Declares target distance

                Debug.DrawLine(gameObject.transform.position, hit.point, Color.red, 1.0F); // draws firingline to target

                target       = hit.collider.gameObject;                                    //assigns target
                targethealth = (HealthAndDeduction)target.GetComponent(typeof(HealthAndDeduction));
                targethealth.DamageCalc(typeDamage, damage);

                // print("damaging target");//Declares when Target us damaged
                //   gameObject.SendMessage("DamageCalc", typeDamage, damage);
            }
        }
//==============================================================================
        //MISSILE SPAWN
        if (typeWeapon == weaponType.missile)
        {                                                                    //spawns a clone projectile with a target location
            Vector3 dir = transform.TransformDirection(Vector3.forward);
            if (Physics.Raycast(transform.position, dir, out hit, maxRange)) //If target detected then fire
            {
                Vector3 offset = new Vector3(0, 0, 0);
                clone   = Instantiate(projectile, transform.position + offset, transform.rotation) as GameObject;
                target  = hit.collider.gameObject;//assigns target
                missile = (MissileScript)clone.GetComponent(typeof(MissileScript));
                missile.SetTarget(target);
                prevTarget = target;
                Debug.DrawLine(gameObject.transform.position, hit.point, Color.red, 1.0F);// draws firingline to target
                //    Debug.Log(hit.transform.name + " found!");// declares if object was found
                // print("Found a target game object distance of " + hit.distance);//Declares target distance
                //   print("firing missile");//Declares when Target us damaged
            }
            else if (target != null)  // if target not detected but target not null fire
            {
                Vector3 offset = new Vector3(0, 0, 0);
                clone   = Instantiate(projectile, transform.position + offset, transform.rotation) as GameObject;
                missile = (MissileScript)clone.GetComponent(typeof(MissileScript));
                missile.SetTarget(prevTarget);
            }
//==============================================================
        }//BULLET SPAWN
        if (typeWeapon == weaponType.turret)
        {//fires a cloned projectile
         //     print("Cannon Fire!");

            Vector3 offset           = new Vector3(0, 0, 0);
            Vector3 bulletTrajectory = new Vector3(0, 0, speed);
            clone = Instantiate(projectile, transform.position + offset, transform.rotation) as GameObject;
            //     bullet = (BulletScript)clone.GetComponent(typeof(BulletScript));

            clone.GetComponent <Rigidbody>().AddRelativeForce(bulletTrajectory);
        }
    }
    void Start()
    {
        Spell s = new Spell();

        s.cast = SpellRangedAttack((Action cast, AT.ATTile target) => {
            AT.Character.Effect.Damage dmg = new AT.Character.Effect.Damage(AT.Character.Effect.DamageType.NECROTIC);

            int numDice = NumDiceFromScaleThresholds(new List <int> {
                5, 11, 17
            }, (cast as Cast).Spell.scaler);
            GaugeDamageRollAndTally(dmg.gauge, numDice.ToString() + "d8");

            AT.Character.Condition.ICondition condition  = new AT.Character.Condition.Necrosis(1, AT.Character.Condition.TickType.TURN_BEGIN, cast.actor.CharSheet);
            AT.Character.Effect.ConditionEffect necrosis = new AT.Character.Effect.ConditionEffect(condition);

            return(new List <AT.Character.Effect.GenericEffect> {
                dmg, necrosis
            });
        }, MissileScript.MissileAnimationName.PLACEHOLDER,
                                   (Action cast, AT.ATTile target) => {
            AT.Character.Effect.Damage dmg = new AT.Character.Effect.Damage(AT.Character.Effect.DamageType.NECROTIC);

            int numDice = NumDiceFromScaleThresholds(new List <int> {
                5, 11, 17
            }, (cast as Cast).Spell.scaler);
            GaugeDamageRollAndTally(dmg.gauge, numDice.ToString() + "d8", true);
            AT.Character.Condition.ICondition condition  = new AT.Character.Condition.Necrosis(1, AT.Character.Condition.TickType.TURN_BEGIN, cast.actor.CharSheet);
            AT.Character.Effect.ConditionEffect necrosis = new AT.Character.Effect.ConditionEffect(condition);

            return(new List <AT.Character.Effect.GenericEffect> {
                dmg, necrosis
            });
        });

        s.school         = School.NECROMANCY;
        s.name           = SpellName.CHILL_TOUCH;
        s.classType      = ClassType.WIZARD;
        s.targetingType  = TargetingType.SINGLE_ENEMY;
        s.rangeInSquares = 20;
        s.isCantrip      = true;

        s.description = "<i>Chill Touch\nMake a ranged spell attack against an enemy within 120ft.  The enemy suffers 1d8 necrotic damage, and cannot be healed until the start of the caster's next turn.</i>";
        RegisterSpell(s);


        CastRoutine sgCast = SpellTouchAttack((Action cast, AT.ATTile target) => {
            AT.Character.Effect.Damage dmg = new AT.Character.Effect.Damage(AT.Character.Effect.DamageType.LIGHTNING);

            int numDice = NumDiceFromScaleThresholds(new List <int> {
                5, 11, 17
            }, (cast as Cast).Spell.scaler);
            GaugeDamageRollAndTally(dmg.gauge, numDice.ToString() + "d8");

            AT.Character.Effect.DelegateEffect shocked = new AT.Character.Effect.DelegateEffect((character, spellCast) => {
                target.FirstOccupant.ActorComponent.PreventReactions(spellCast);
            });

            return(new List <AT.Character.Effect.GenericEffect> {
                dmg, shocked
            });
        }, (Action cast, AT.ATTile target) => {
            AT.Character.Effect.Damage dmg = new AT.Character.Effect.Damage(AT.Character.Effect.DamageType.LIGHTNING);

            int numDice = NumDiceFromScaleThresholds(new List <int> {
                5, 11, 17
            }, (cast as Cast).Spell.scaler);
            GaugeDamageRollAndTally(dmg.gauge, numDice.ToString() + "d8", true);

            AT.Character.Effect.DelegateEffect shocked = new AT.Character.Effect.DelegateEffect((character, spellCast) => {
                target.FirstOccupant.ActorComponent.PreventReactions(spellCast);
            });
            return(new List <AT.Character.Effect.GenericEffect> {
                dmg, shocked
            });
        });
        Spell shockingGrasp = new Spell();

        shockingGrasp.cast           = sgCast;
        shockingGrasp.school         = School.EVOCATION;
        shockingGrasp.name           = SpellName.SHOCKING_GRASP;
        shockingGrasp.classType      = ClassType.WIZARD;
        shockingGrasp.targetingType  = TargetingType.SINGLE_ENEMY;
        shockingGrasp.rangeInSquares = 1;
        shockingGrasp.isCantrip      = true;
        RegisterSpell(shockingGrasp);

        CastRoutine fbCast = SpellRangedAttack((Action cast, AT.ATTile target) => {
            AT.Character.Effect.Damage dmg = new AT.Character.Effect.Damage(AT.Character.Effect.DamageType.FIRE);


            int numDice = NumDiceFromScaleThresholds(new List <int> {
                5, 11, 17
            }, (cast as Cast).Spell.scaler);
            GaugeDamageRollAndTally(dmg.gauge, numDice.ToString() + "d10");

            return(new List <AT.Character.Effect.GenericEffect> {
                dmg
            });
        }, MissileScript.MissileAnimationName.PLACEHOLDER,
                                               (Action cast, AT.ATTile target) => {
            AT.Character.Effect.Damage dmg = new AT.Character.Effect.Damage(AT.Character.Effect.DamageType.FIRE);

            int numDice = NumDiceFromScaleThresholds(new List <int> {
                5, 11, 17
            }, (cast as Cast).Spell.scaler);
            GaugeDamageRollAndTally(dmg.gauge, numDice.ToString() + "d10", true);

            return(new List <AT.Character.Effect.GenericEffect> {
                dmg
            });
        });
        Spell firebolt = new Spell();

        firebolt.cast           = fbCast;
        firebolt.school         = School.EVOCATION;
        firebolt.name           = SpellName.FIREBOLT;
        firebolt.classType      = ClassType.WIZARD;
        firebolt.targetingType  = TargetingType.SINGLE_ENEMY;
        firebolt.rangeInSquares = 12;
        firebolt.isCantrip      = true;
        RegisterSpell(firebolt);

        CastRoutine poisonSprayCast = SpellSavingThrow((Action cast, AT.ATTile target) => {
            AT.Character.Effect.Damage dmg = new AT.Character.Effect.Damage(AT.Character.Effect.DamageType.POISON);
            dmg.Gauge.ChangeCurrentAndMax(Sheet.DiceRoll(12));

            return(new List <AT.Character.Effect.GenericEffect> {
                dmg
            });
        },
                                                       (Action cast, AT.ATTile target) => {
            //miss effect does nothing
            return(new List <AT.Character.Effect.GenericEffect>());
        }, AbilityType.CONSTITUTION);

        Spell poisonSpray = new Spell();

        poisonSpray.cast           = poisonSprayCast;
        poisonSpray.school         = School.CONJURATION;
        poisonSpray.name           = SpellName.POISON_SPRAY;
        poisonSpray.classType      = ClassType.WIZARD;
        poisonSpray.targetingType  = TargetingType.SINGLE_ENEMY;
        poisonSpray.rangeInSquares = 2;
        poisonSpray.isCantrip      = true;
        RegisterSpell(poisonSpray);

        CastRoutine magicMissileCast = ((caster, cast, targets) => {
            float delay = 0f;             //this doesn't work...  All missils have the same delay
            foreach (AT.ATTile target in targets)
            {
                CharacterCastingAnimation castingAnims = caster.GetComponent <CharacterCastingAnimation>();
                GameObject prefab = MissileAnimationPrefabDispenser.instance.GetAnimationPrefabByName(MissileScript.MissileAnimationName.PLACEHOLDER);
                if (castingAnims != null)
                {
                    castingAnims.SetupAndDoCastAnimation(cast);
                    castingAnims.OneShotSpellRelease((animationInst) => {
                        GameObject copy = Instantiate(prefab);
                        copy.transform.position = caster.transform.position;
                        MissileScript missile = copy.GetComponent <MissileScript>();

                        missile.DelayLaunchAt(target, delay, true);
                        //Safe to not worry about unsubbing, thanks to garbage cleanup
                        missile.OnConnectedWithTarget += (MissileScript self) => {
                            AT.Character.Effect.Damage d = new AT.Character.Effect.Damage(AT.Character.Effect.DamageType.FORCE);
                            d.Gauge.ChangeCurrentAndMax(Sheet.DiceRoll(4) + 1);
                            if (target.FirstOccupant != null)
                            {
                                d.ApplyTo(target.FirstOccupant.ActorComponent.CharSheet);
                            }
                            //This assumes only one missile.   Needs a "Checkin of sorts, to conditionally check on finished"
                            cast.CallOnFinished();
                        };
                    });                     //ToBe ATOCIJL
                }
                else
                {
                    GameObject copy = Instantiate(prefab);
                    copy.transform.position = caster.transform.position;
                    MissileScript missile = copy.GetComponent <MissileScript>();
                    missile.DelayLaunchAt(target, delay, true);
                    //Safe to not worry about unsubbing, thanks to garbage cleanup
                    missile.OnConnectedWithTarget += (MissileScript self) => {
                        AT.Character.Effect.Damage d = new AT.Character.Effect.Damage(AT.Character.Effect.DamageType.FORCE);
                        d.Gauge.ChangeCurrentAndMax(Sheet.DiceRoll(4) + 1);
                        if (target.FirstOccupant != null)
                        {
                            d.ApplyTo(target.FirstOccupant.ActorComponent.CharSheet);
                        }
                        //This assumes only one missile.   Needs a "Checkin of sorts, to conditionally check on finished"
                        cast.CallOnFinished();
                    };
                }
                delay += .2f;
            }
        });

        Spell magicMissile = new Spell();

        magicMissile.cast                 = magicMissileCast;
        magicMissile.level                = 1;
        magicMissile.school               = School.EVOCATION;
        magicMissile.name                 = SpellName.MAGIC_MISSILE;
        magicMissile.classType            = ClassType.WIZARD;
        magicMissile.targetingType        = TargetingType.MULTIPLE_ENEMY;
        magicMissile.alterCastOnSetParams = (cast) => {
            cast.NumTargets  = 3;
            cast.NumTargets += magicMissile.scaler.ScaleValue();
        };
        magicMissile.rangeInSquares = 60;

        RegisterSpell(magicMissile);
    }