示例#1
0
            public void Init(data.Player player)
            {
                // characters
                for (int i = 0; i < btnCharacters.Count; ++i)
                {
                    CharacterController charController = btnCharacters[i].gameObject.GetComponent <CharacterController>();

                    if (i < player.Characters.Count)
                    {
                        // set button for character controller
                        btnCharacters[i].name = player.Characters[i].Name;
                        btnCharacters[i].GetComponentInChildren <Text>().text = player.Characters[i].Name;
                        charController.Init(player.Characters[i]);
                    }
                    else
                    {
                        btnCharacters[i].gameObject.SetActive(false);
                        charController.scrollbar.gameObject.SetActive(false);
                    }
                }


                MissileController missileController = btnMissile.gameObject.GetComponent <MissileController>();

                // missiles
                if (player.Missiles.Count > 0)
                {
                    // set button for character controller
                    missileController.Init(player.Missiles[0]);
                }
                else
                {
                    missileController.gameObject.SetActive(false);
                }
            }
示例#2
0
 public void OnMissileCollision(MissileController missile)
 {
     if (missile.ResetMultiplier)
     {
         Multiplier.ResetMultiplier();
     }
 }
        public Map CopyAndFlip(Map map, CoordinateFlipper flipper, Dictionary <int, Entity> flippedEntities)
        {
            var copy = new Map(map);

            // Copy all entities including walls
            for (var y = 0; y < map.Height; y++)
            {
                for (var x = 0; x < map.Width; x++)
                {
                    var entity = map.GetEntity(x, y);

                    if (entity == null)
                    {
                        continue;
                    }

                    Entity flippedEntity = null;
                    if (entity.GetType() == typeof(Alien))
                    {
                        flippedEntity = Alien.CopyAndFlip((Alien)entity, flipper, flippedEntities);
                    }
                    else if (entity.GetType() == typeof(Missile))
                    {
                        flippedEntity = Missile.CopyAndFlip((Missile)entity, flipper, flippedEntities);
                    }
                    else if (entity.GetType() == typeof(Bullet))
                    {
                        flippedEntity = Bullet.CopyAndFlip((Bullet)entity, flipper, flippedEntities);
                    }
                    else if (entity.GetType() == typeof(Shield))
                    {
                        flippedEntity = Shield.CopyAndFlip((Shield)entity, flipper, flippedEntities);
                    }
                    else if (entity.GetType() == typeof(Ship))
                    {
                        flippedEntity = Ship.CopyAndFlip((Ship)entity, flipper, flippedEntities);
                    }
                    else if (entity.GetType() == typeof(AlienFactory))
                    {
                        flippedEntity = AlienFactory.CopyAndFlip((AlienFactory)entity, flipper, flippedEntities);
                    }
                    else if (entity.GetType() == typeof(MissileController))
                    {
                        flippedEntity = MissileController.CopyAndFlip((MissileController)entity, flipper,
                                                                      flippedEntities);
                    }
                    else if (entity.GetType() == typeof(Wall))
                    {
                        flippedEntity = Wall.CopyAndFlip((Wall)entity, flipper, flippedEntities);
                    }

                    if ((flippedEntity != null) && (copy.GetEntity(flippedEntity.X, flippedEntity.Y) == null))
                    {
                        copy.AddEntity(flippedEntity);
                    }
                }
            }

            return(copy);
        }
示例#4
0
 void Start()
 {
     missileController = GetComponentInParent<MissileController> ();
     if (blastRadius <= 0) {
         blastRadius = DEFAULT_BLAST_RADIUS;
     }
 }
示例#5
0
    public void TriggerMissile()
    {
        MissileController missileController = m_TriggerMissile.GetComponent <MissileController>();

        missileController.Trigger();
        m_TriggerMissile = null;
    }
    /// <summary>
    /// Called when an enemy should fire. If there are already MAX_ENEMY_MISSILES, then no firing will
    /// take place.  Checks the ACTIVE CHILD count, since pooling is used to spawn/despawn (activeate/deactive)
    /// enemy missiles.
    /// </summary>
    /// <param name="enemy"></param>
    private bool enemyFireMissile(EnemyController enemy)
    {
        int  activeCount = 0;
        bool fired       = false;

        for (int cnt = 0; cnt < EnemyMissileContainer.childCount; cnt++)
        {
            if (EnemyMissileContainer.GetChild(cnt).gameObject.activeInHierarchy == true)
            {
                activeCount++;
            }
        }

        // Fire a missile from the invader if the maximum number of active missiles don't already exist.
        if (activeCount < GameGlobals.MAX_ENEMY_MISSILES)
        {
            GameObject missile = RFObjectPool.Spawn(EnemyMissilePrefab, Vector3.zero, Quaternion.identity);
            if (missile != null)
            {
                MissileController mc = missile.GetComponent <MissileController>();
                mc.EnemyFired(enemy.gameObject);
                fired = true;
            }
        }
        return(fired);
    }
示例#7
0
    private void SpawnMissile()
    {
        float yOffset = Random.RandomRange(-MAX_SPAWN_OFFSET, MAX_SPAWN_OFFSET);
        float ypos    = target.transform.position.y + yOffset;

        if (ypos < 1.0f)
        {
            ypos = 1.0f;
        }
        Vector3 missilePosition = new Vector3(target.transform.position.x + TARGET_X_OFFSET, ypos, target.transform.position.z);

        Vector3 estimatedPosition = target.transform.position + (target.linearVelocity * 7600.0f);
        float   estimatedDist     = Vector3.Distance(estimatedPosition, missilePosition);
        float   angleOffset       = Random.Range(-MAX_SPAWN_ANGLE, MAX_SPAWN_ANGLE);
        float   height            = missilePosition.y - estimatedPosition.y;
        float   angle             = (Mathf.Sin(height / estimatedDist) * Mathf.Rad2Deg) + angleOffset;

        GameObject missile = GameObject.Instantiate(missilePrefab);

        missile.transform.position = missilePosition;
        missile.transform.rotation = Quaternion.Euler(0.0f, angle, 0.0f);
        MissileController controller = missile.GetComponent <MissileController>();

        controller.Fire(angle);
    }
示例#8
0
        public static Player CopyAndFlip(Player player, CoordinateFlipper flipper,
                                         Dictionary <int, Entity> flippedEntities)
        {
            var copy = new Player(player)
            {
                PlayerNumber = player.PlayerNumber == 1 ? 2 : 1
            };

            copy.Missiles.Clear();
            foreach (var missile in player.Missiles)
            {
                copy.Missiles.Add(flippedEntities.ContainsKey(missile.Id)
                    ? (Missile)flippedEntities[missile.Id]
                    : Missile.CopyAndFlip(missile, flipper, flippedEntities));
            }

            if (player.MissileController != null)
            {
                copy.MissileController = MissileController.CopyAndFlip(player.MissileController, flipper, flippedEntities);
            }

            if (player.AlienFactory != null)
            {
                copy.AlienFactory = AlienFactory.CopyAndFlip(player.AlienFactory, flipper, flippedEntities);
            }

            copy.AlienManager = AlienManager.CopyAndFlip(player.AlienManager, flipper, flippedEntities);

            if (player.Ship != null)
            {
                copy.Ship = Ship.CopyAndFlip(player.Ship, flipper, flippedEntities);
            }

            return(copy);
        }
示例#9
0
    void OnLaunchFragments(MissileController.FragmentsArg arg)
    {
        if (arg.cause != null)
        {
            return;
        }
        Rigidbody2D       r = GetComponent <Rigidbody2D>();
        Vector2           p = r.velocity * r.mass, p2 = p;
        Vector3           shift = p.normalized * Shift;
        MissileController mc    = SplitsPrefab.PrefabInstantiate(transform.position + shift, Damage, p);

        mc.transform.rotation = transform.rotation;
        for (int i = 0; i < Count; i++)
        {
            p     = p.Rotate(Angle);
            p2    = p2.Rotate(-Angle);
            shift = p.normalized * Shift;
            mc    = SplitsPrefab.PrefabInstantiate(transform.position + shift, Damage, p);
            mc.transform.rotation = transform.rotation;

            shift = p2.normalized * Shift;
            mc    = SplitsPrefab.PrefabInstantiate(transform.position + shift, Damage, p2);
            mc.transform.rotation = transform.rotation;
        }
    }
示例#10
0
    /*
     * Retarget active missiles to the knife
     */
    void RedirectMissiles()
    {
        KnifeController knife = playerKnifeController.GetActiveKnifeController();

        if (knife == null)
        {
            return;
        }

        // Get all currently active missiles
        List <MissileController> missiles = new List <MissileController>();

        foreach (GameObject obj in GameObject.FindGameObjectsWithTag("Missile"))
        {
            MissileController controller = obj.GetComponent <MissileController>();
            if (controller != null)
            {
                missiles.Add(controller);
            }
        }

        if (missiles.Count <= 0)
        {
            return;
        }

        // apply new target
        foreach (MissileController missile in missiles)
        {
            // set target here!
            missile.SetTarget(knife.transform);
        }
    }
示例#11
0
    private IEnumerator ShootSR()
    {
        float damage     = playerWeaponStats.WeaponStats[(int)GunMode.SR, (int)PlayerWeaponStats.WeaponStat.DAMAGE];
        float energyDown = playerWeaponStats.WeaponStats[(int)GunMode.SR, (int)PlayerWeaponStats.WeaponStat.CONSUMPTION];

        if (canSR && playerStats.EnergyValue >= energyDown)
        {
            canSR = false;
            CmdNetworkAnimation("SR");
            GetComponent <PlayerSound>().PlayOneShot(gameObject.name, (int)PlayerSound.AudioClipNum.SR, 1f);

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

            if (Physics.Raycast(ray, out hit, 3000f, 1 << LayerMask.NameToLayer("Player")
                                | 1 << LayerMask.NameToLayer("Block")
                                | 1 << LayerMask.NameToLayer("HeadHitBox")
                                | 1 << LayerMask.NameToLayer("Bullet")))
            {
                ray = new Ray(cam.transform.position,
                              (hit.point - fireStart.transform.position));

                if (hit.transform.gameObject.tag == "Player")
                {
                    CmdHitPlayer(hit.point, hit.normal);
                }
                else
                {
                    CmdOnhit(hit.point, hit.normal);
                }

                if (hit.collider.gameObject.tag == "Player")
                {
                    CmdTakeDamage(hit.collider.gameObject.name, damage);
                    GetComponent <PlayerSound>().PlayOneShot(hit.collider.gameObject.name, (int)PlayerSound.AudioClipNum.DAMAGE, 1f);
                }
                else if (hit.collider.gameObject.tag == "HeadHitBox")
                {
                    CmdTakeDamage(hit.collider.gameObject.name, damage * 2f);
                    GetComponent <PlayerSound>().PlayOneShot(hit.collider.gameObject.name, (int)PlayerSound.AudioClipNum.DAMAGE, 1f);
                }
                else if (hit.collider.gameObject.tag == "Bullet")
                {
                    BulletController bullet = hit.collider.gameObject.GetComponent <BulletController>();
                    CmdRpgReset(bullet.getShooter().name, bullet.getRpgCount(), hit.point);
                }
                else if (hit.collider.gameObject.tag == "Missile")
                {
                    MissileController missile = hit.collider.gameObject.GetComponent <MissileController>();
                    CmdMissileReset(missile.getShooter().name, missile.getMissileCount(), hit.point);
                }
            }

            playerStats.EnergyDown(energyDown);
            yield return(new WaitForSeconds(playerWeaponStats.WeaponStats[(int)GunMode.SR, (int)PlayerWeaponStats.WeaponStat.DELAY]));

            canSR = true;
        }
    }
示例#12
0
 void Start()
 {
     controller = GetComponent <MissileController>();
     if (triggerImmediately)
     {
         OnTrigger(this, System.EventArgs.Empty);
     }
 }
示例#13
0
    public void ResetEffect(MissileController newMissile)
    {
        currentMissile = newMissile;

        currentTime = Time.time;
        lifetime    = particleSys.main.duration + particleSys.main.startLifetime.constant;
        newMissile.fireAgainTiming = Time.time + lifetime;
    }
示例#14
0
 private void DestroyMissiles()
 {
     GameObject[] missiles = GameObject.FindGameObjectsWithTag("Missile");
     foreach (GameObject missile in missiles)
     {
         MissileController controller = missile.GetComponent <MissileController>();
         controller.Destroy();
     }
 }
示例#15
0
    private void Awake()
    {
        missileRigidbody  = GetComponent <Rigidbody2D>();
        boxCollider       = GetComponent <BoxCollider2D>();
        missileController = FindObjectOfType <MissileController>();
        playerResources   = FindObjectOfType <PlayerResources>();

        model = this.transform.GetChild(0).gameObject;
    }
        public void InstantiateMissileAtLocation(List <Missile> missiles, int x, int y, float rate)
        {
            float interval = 0.15f;

            for (int m = 0; m < missiles.Count; m++)
            {
                float z = y;
                if (m > 0 && m % 2 == 0)
                {
                    z += m * interval;
                }
                else
                {
                    z += m * interval;
                }

                PlayerType missilePlayerType = missiles [m].PlayerType;
                int        direction         = missilePlayerType == PlayerType.A ? 1 : -1;

                var missile = missilePlayerType == PlayerType.A ?
                              MissileObjectPool.current.GetForPlayerA() :
                              MissileObjectPool.current.GetForPlayerB();

                missile.SetActive(true);
                missile.transform.position = new Vector3(x, missile.transform.position.y, z);
                MissileController missileCtrl = missile.GetComponent <MissileController>();
                missileCtrl.Setup(missiles[m], direction, rate);

                if (IsNewMissile(missileCtrl.missile))
                {
                    // Play muzzleflash effect
                    var pos = missile.transform.position;

                    var offset      = missileCtrl.missile.PlayerType == PlayerType.A ? -0.5f : 0.25f;
                    var muzzleFlash = missileCtrl.missile.PlayerType == PlayerType.A ? muzzleFlashPlayerA : muzzleFlashPlayerB;

                    pos.x -= direction * missileCtrl.missile.Speed + offset;
                    pos.y  = 0.5f;
                    var muzzleFlashObj = Instantiate(muzzleFlash, pos, Quaternion.identity);
                    Destroy(muzzleFlashObj, CommandLineUtil.GetRoundStep());

                    AudioClip clip;

                    if (missileCtrl.missile.PlayerType == PlayerType.A)
                    {
                        clip = firingSoundsPlayerA[Random.Range(0, firingSoundsPlayerA.Length)];
                    }
                    else
                    {
                        clip = firingSoundsPlayerB[Random.Range(0, firingSoundsPlayerB.Length)];
                    }

                    missileCtrl.PlaySound(clip);
                }
            }
        }
示例#17
0
    public override void Fire(Transform firePoint)
    {
        GameObject missile = spawnGameObjectBehaviour.Spawn(prefab, firePoint.position, firePoint.rotation);

        MissileController missileController = missile.GetComponent <MissileController>();

        Assert.IsNotNull(missileController, $"{missile.gameObject.name} doesn't have MissileController component");

        missileController.SearchAndDestroy();
    }
示例#18
0
    private void RpcMissileReset(string name, int count, Vector3 lastPosition)
    {
        MissileController missileController =
            GameDirector.Instance.players[name].GetComponent <AttackManager>().missiles[count].GetComponent <MissileController>();

        if (missileController != null)
        {
            missileController.Reset(lastPosition);
        }
    }
示例#19
0
    private void Fire(Vector3 focus, Vector3 from)
    {
        GameObject missile = Instantiate(missilePrefab, from, new Quaternion());

        missile.layer = 9;
        MissileController missileComponent = missile.GetComponent <MissileController> ();

        missileComponent.direction = focus - from;
        missileComponent.SetUser(this.gameObject);
    }
示例#20
0
    private void Shoot()
    {
        Vector3           spawnPoint        = transform.position;
        MissileController missileController = Container.InstantiatePrefabForComponent <MissileController>(missileResource,
                                                                                                          spawnPoint,
                                                                                                          Quaternion.identity,
                                                                                                          _missileParent.transform);

        missileController.transform.LookAt(player.transform);
    }
示例#21
0
    // Fire missiles. Higher level means faster travel speed
    public void FireMissiles(int currLevel)
    {
        // Missiles
        MissileController currentMissile_up   = missilePool.objects[0].GetComponent <MissileController>();
        MissileController currentMissile_down = missilePool.objects[1].GetComponent <MissileController>();

        if (!currentMissile_up.gameObject.activeInHierarchy && Time.time >= currentMissile_up.fireAgainTiming)
        {
            currentMissile_up.missilePattern        = missilePattern;
            currentMissile_up.shotSpeed             = 5.0f * currLevel;
            currentMissile_up.rotationStartingAngle = 30;
            currentMissile_up.rotationLimit         = 70;
            currentMissile_up.twoWay_isUp           = true;
            currentMissile_up.InitializeMissile();
            currentMissile_up.gameObject.SetActive(true);
        }

        if (!currentMissile_down.gameObject.activeInHierarchy && Time.time >= currentMissile_down.fireAgainTiming)
        {
            currentMissile_down.missilePattern        = missilePattern;
            currentMissile_down.shotSpeed             = 5.0f * currLevel;
            currentMissile_down.rotationStartingAngle = -30;
            currentMissile_down.rotationLimit         = 70;
            currentMissile_down.twoWay_isUp           = false;
            currentMissile_down.InitializeMissile();
            currentMissile_down.gameObject.SetActive(true);
        }

        // Version 1: Deprecate due to priority bug causing up-firing missiles to always shoot upwards

        /*
         * for(int i = 0; i < missilePool.objects.Count; i++) {
         *  MissileController currentMissile_up = missilePool.objects[i].GetComponent<MissileController>();
         *  if(!currentMissile_up.gameObject.activeInHierarchy) {
         *      currentMissile_up.missilePattern = missilePattern;
         *      currentMissile_up.rotationStartingAngle = 30;
         *      currentMissile_up.twoWay_isUp = true;
         *      currentMissile_up.InitializeMissile();
         *      currentMissile_up.gameObject.SetActive(true);
         *      break;
         *  }
         * }
         * for(int i = 0; i < missilePool.objects.Count; i++) {
         *  MissileController currentMissile_down = missilePool.objects[i].GetComponent<MissileController>();
         *  if(!currentMissile_down.gameObject.activeInHierarchy) {
         *      currentMissile_down.missilePattern = missilePattern;
         *      currentMissile_down.rotationStartingAngle = -30;
         *      currentMissile_down.twoWay_isUp = false;
         *      currentMissile_down.InitializeMissile();
         *      currentMissile_down.gameObject.SetActive(true);
         *      break;
         *  }
         * }
         */
    }
示例#22
0
    public MissileController PrefabInstantiate(Vector3 position, float damage, Vector2 impulse)
    {
        GameObject        go = GameObject.Instantiate(gameObject) as GameObject;
        MissileController mc = go.GetComponent <MissileController>();

        mc.transform.position = position;
        mc.Damage             = damage;
        mc.GetComponent <Rigidbody2D>().AddForce(impulse, ForceMode2D.Impulse);

        return(mc);
    }
示例#23
0
    private GameObject Shoot()
    {
        sparks.Play();
        // Shoot a missile
        GameObject        missileInstance = Instantiate(missile, missileSpawn.position, missileSpawn.rotation);
        MissileController controller      = missileInstance.GetComponent <MissileController>();

        controller.moveSpeed = (float)attributes.bulletSpeed;
        controller.spawner   = gameObject;
        return(missileInstance);
    }
示例#24
0
    public void OnFire(Vector2 direction, bool alt)
    {
        MissileController p  = alt ? Weapon.AltMissilePrefab : Weapon.MainMissilePrefab;
        MissileController mc = p.PrefabInstantiate(
            (Vector2)transform.position + direction.normalized * 3,
            Damage,
            direction * p.FirePower);


        mc.SendMessage("OnFire", direction);
    }
示例#25
0
    public override void Activate(PlayerController playerController)
    {
        playerController.ui?.ClearSkillUIFor(this);
        AudioManager.Instance?.Play("MissileShotSFX");

        MissileController projectile = Object.Instantiate(Resources.Load <GameObject>("Prefabs/Missile")).GetComponent <MissileController>();

        projectile.transform.position   = playerController.transform.position + playerController.direction.ToVector3() * safeDistance;
        projectile.Rigidbody2D.velocity = (playerController.moveSpeed + speed) * playerController.direction;
        projectile.color = playerController.color;
    }
示例#26
0
    public override void FireShot()
    {
        fireCooldown = Time.time + fireRate;
        // Projectile

        if (ammo > 0 || ammo == -1)
        {
            ammo--;
            if (origin == 0)
            {
                //Player missile. Update UI
                GameSingleton.Instance.Missiles = ammo;
                EventManager.TriggerEvent("missileFired");
            }

            if (createPool)
            {
                bullet = pool.GetPooledObject();
                bullet.transform.position = transform.position + transform.forward * createForward;
                bullet.transform.rotation = transform.rotation;
            }
            else
            {
                bullet = Instantiate(projectile, transform.position + transform.forward * createForward, Quaternion.identity) as GameObject;
            }

            Projectile P = bullet.GetComponent <Projectile>();
            P.damage    = damage;
            P.duration  = bulletLife;
            P.pooled    = createPool;
            P.speed     = bulletSpeed;
            P.layerMask = layerMask;
            P.Init();

            // Missile stuff
            MissileController missile = P.GetComponent <MissileController>();
            if (missile != null)
            {
                missile.targetTag  = targetTag;
                missile.targetTag2 = targetTag2;
            }

            bullet.SetActive(true);
            if (bulletSpeed > 0)
            {
                bullet.GetComponent <Rigidbody>().velocity = transform.forward * bulletSpeed;
            }
        }
        else
        {
            // out of missiles. error sound.
        }
    }
示例#27
0
 protected override void RegisterDelegates()
 {
     base.RegisterDelegates();
     barrageAbility.onReleaseShots += (shots) =>
     {
         shots.ForEach(shot =>
         {
             MissileController missile = shot.gameObject.FindComponent <MissileController>();
             missile.Target            = (Vector2)Utility.MouseWorldPos;
         });
     };
 }
示例#28
0
    void Update()
    {
        if (Time.time >= (currentTime + lifetime))
        {
            returnToInitialPosition.ResetPosition();

            // Disable current missile after effect finishes playing.
            currentMissile = null;

            gameObject.SetActive(false);
        }
    }
示例#29
0
    // Restart -resets position
    public void restart()
    {
        if (missile != null)
        {
            Destroy(missile.gameObject);
            missile = null;
        }
        Vector3 pos = transform.position;

        pos.x = 0;
        transform.position = pos;
    }
示例#30
0
        public void TestMissileController()
        {
            MissileController bc = new MissileController();

            try {
                bc.ExplodeBullet(bc.transform.position);
            }catch (Exception e) {
                //Explode bullet doesn't work
                Assert.True(false, "error " + e.ToString());
                //	Assert.True(false);
            }
        }
示例#31
0
    void SpawnMissile()
    {
        GameObject missile = (GameObject)Instantiate(MissilePrefab, MissileSpawnPoint.position, MissileSpawnPoint.rotation);

        MissileController missileController = missile.GetComponent <MissileController>();

        missileController.OnMissileExploded = OnMissileExploded;
        missileController.TailColor         = Player.Color;

        Rigidbody rb = missile.GetComponent <Rigidbody>();

        rb.AddForce(MissileSpawnPoint.forward * MissileForce, ForceMode.Impulse);
    }
 public void TestMissileController()
 {
     MissileController bc = new MissileController();
     try {
         bc.ExplodeBullet(bc.transform.position);
     }catch (Exception e) {
         //Explode bullet doesn't work
         Assert.True(false,"error "+e.ToString());
     //	Assert.True(false);
     }
 }
 void Start()
 {
     controller = GetComponent<MissileController>();
     objPlayer = (GameObject) GameObject.FindWithTag("Player");
 }