Exemplo n.º 1
0
        private void Exlode()
        {
            SpaceInvaderAbstractFactory spaceInvaderFactory = SpaceInvaderFactoryProducer.GetFactory("EffectsFactory");
            Effects invadeExplodeEffect = spaceInvaderFactory.GetEffects(EffectsType.PlayerbulletExplode);

            invadeExplodeEffect.transform.position = transform.position;
            invadeExplodeEffect.transform.rotation = Quaternion.identity;
            invadeExplodeEffect.gameObject.SetActive(true);
            invadeExplodeEffect.DestroyAfterSomeTime(.15f);
        }
        // called when player bullet hit on invader. check invader script
        public void DestroyInvader(Invader thisInvader)
        {
            // for boss checking
            if (m_lastInviderColumnIndexCntr < 0)
            {
                m_lastInviderColumnIndex = thisInvader.m_coumnIndex; m_lastInviderColumnIndexCntr = 1;
            }
            else
            {
                int cntr = m_lastInviderColumnIndex == thisInvader.m_coumnIndex ? m_lastInviderColumnIndexCntr + 1 : 1; // adding to the colmns index
                m_lastInviderColumnIndexCntr = cntr;
                m_lastInviderColumnIndex     = thisInvader.m_coumnIndex;
            }

            bool timetoBoSS = m_lastInviderColumnIndexCntr >= m_maxInvaderColumnCntr ? true : false;

            if (timetoBoSS && m_lastScoreBossShown + m_minScoreNeeded < m_gameScoreSO.Value)
            {
                if (m_bossInvader == null)
                {
                    m_lastScoreBossShown = m_gameScoreSO.Value;
                    CreatNewBoss();
                    Debug.Log("creating new boss : USER Generated");
                    m_lastBossShownTime = Time.time;
                }
            }

            m_totalAliveInviders--; // decrement the invader count
            m_totalAliveInvadersSO.Value = m_totalAliveInviders;
            m_gameScoreSO.Value          = m_gameScoreSO.Value + thisInvader.m_killValue.Value;
            Vector3 invaderLastPos = thisInvader.transform.position;

            m_invaderRows[thisInvader.m_rowIndex][thisInvader.m_coumnIndex] = null;
            SpaceInvaderAbstractFactory spaceInvaderFactory = SpaceInvaderFactoryProducer.GetFactory("InvaderFactory"); // accessomg InvaderFactory

            spaceInvaderFactory.RecycleInvader(thisInvader);

            spaceInvaderFactory = SpaceInvaderFactoryProducer.GetFactory("EffectsFactory");
            Effects invadeExplodeEffect = spaceInvaderFactory.GetEffects(EffectsType.AlianExplodeEffect);

            invadeExplodeEffect.transform.position = invaderLastPos;
            invadeExplodeEffect.gameObject.SetActive(true);
            invadeExplodeEffect.DestroyAfterSomeTime(.15f);
            m_audioSource.PlayOneShot(m_invaderExlodeClip);

            UpdateTimeIntervalOFMove();    // check against the number of inviders left and increas the move speed

            if (m_totalAliveInviders == 0) //  next wave
            {
                m_invaderGridState = InvaderGridState.Pause;
                return;
                // for now there wont be any new waves, game will be over at this point
                // wil add new wave feature in the next update
            }
        }
        public void DestroyBoss(Boss boss)
        {
            SpaceInvaderAbstractFactory spaceInvaderFactory = SpaceInvaderFactoryProducer.GetFactory("EffectsFactory");
            Effects bossExplodeEffect = spaceInvaderFactory.GetEffects(EffectsType.BossExplode);

            bossExplodeEffect.transform.position = boss.transform.position;
            bossExplodeEffect.gameObject.SetActive(true);
            bossExplodeEffect.DestroyAfterSomeTime(.15f);

            spaceInvaderFactory = SpaceInvaderFactoryProducer.GetFactory("BossFactory"); // accessomg boss factoy
            spaceInvaderFactory.RecycleBoss(boss);
            boss.gameObject.SetActive(false);
            m_audioSource.PlayOneShot(m_invaderExlodeClip);
            m_bossInvader = null;

            // score
            // for now, if the inviders move right it is 100, 50 left move not really a mystery :(
            int bossKillScore = m_invaderHorMovDirection > 0 ? 100 : 50;

            m_gameScoreSO.Value = m_gameScoreSO.Value + bossKillScore;
        }