Beispiel #1
0
        public IEnumerator ClearMonsterSpawnCells(int fightId)
        {
            MonsterSpawnCellDefinition monsterSpawnCellDefinition = m_bossFightMapResources.monsterSpawnCellDefinition;

            if (null == monsterSpawnCellDefinition)
            {
                yield break;
            }
            FightMapDefinition       definition = m_definition;
            FightMapRegionDefinition obj        = definition.regions[fightId];
            Vector2Int sizeMin         = obj.sizeMin;
            Vector2Int sizeMax         = obj.sizeMax;
            List <int> indicesToRemove = ListPool <int> .Get();

            foreach (KeyValuePair <int, GameObject> item in m_monsterSpawnCellDictionary)
            {
                int        key        = item.Key;
                Vector2Int cellCoords = definition.GetCellCoords(key);
                if (cellCoords.get_x() >= sizeMin.get_x() && cellCoords.get_y() >= sizeMin.get_y() && cellCoords.get_x() < sizeMax.get_x() && cellCoords.get_y() < sizeMax.get_y())
                {
                    Transform transform = item.Value.get_transform();
                    if (AudioManager.isReady)
                    {
                        AudioReference disappearanceSound = monsterSpawnCellDefinition.disappearanceSound;
                        if (disappearanceSound.get_isValid())
                        {
                            AudioManager.PlayOneShot(disappearanceSound, transform);
                        }
                    }
                    VisualEffect disappearanceEffect = monsterSpawnCellDefinition.disappearanceEffect;
                    if (null != disappearanceEffect)
                    {
                        Object.Instantiate <VisualEffect>(disappearanceEffect, transform.get_position(), transform.get_rotation(), transform.get_parent());
                    }
                    indicesToRemove.Add(key);
                }
            }
            int indicesToRemoveCount = indicesToRemove.Count;

            if (indicesToRemoveCount > 0)
            {
                float disappearanceDelay = monsterSpawnCellDefinition.disappearanceDelay;
                if (disappearanceDelay > 0f)
                {
                    yield return((object)new WaitForTime(disappearanceDelay));
                }
                for (int i = 0; i < indicesToRemoveCount; i++)
                {
                    int key2 = indicesToRemove[i];
                    if (m_monsterSpawnCellDictionary.TryGetValue(key2, out GameObject value))
                    {
                        monsterSpawnCellDefinition.DestroyInstance(value);
                    }
                }
            }
            ListPool <int> .Release(indicesToRemove);
        }
Beispiel #2
0
        public unsafe IEnumerator AddMonsterSpawnCell(int x, int y, Direction direction)
        {
            MonsterSpawnCellDefinition monsterSpawnCellDefinition = m_bossFightMapResources.monsterSpawnCellDefinition;

            if (null == monsterSpawnCellDefinition)
            {
                yield break;
            }
            IMapDefinition mapDefinition = m_mapDefinition;
            Vector2        val           = Vector2Int.op_Implicit(mapDefinition.sizeMin);

            if ((float)x < ((IntPtr)(void *)val).x || (float)y < ((IntPtr)(void *)val).y)
            {
                yield break;
            }
            Vector2 val2 = Vector2Int.op_Implicit(mapDefinition.sizeMax);

            if ((float)x >= ((IntPtr)(void *)val2).x || (float)y >= ((IntPtr)(void *)val2).y)
            {
                yield break;
            }
            int        index      = mapDefinition.GetCellIndex(x, y);
            CellObject cellObject = m_cellObjectsByIndex[index];
            Transform  transform  = cellObject.get_transform();
            Vector3    position   = transform.get_position() + 0.5f * Vector3.get_up();
            Quaternion rotation   = Quaternion.get_identity();

            if (AudioManager.isReady)
            {
                AudioReference appearanceSound = monsterSpawnCellDefinition.appearanceSound;
                if (appearanceSound.get_isValid())
                {
                    AudioManager.PlayOneShot(appearanceSound, transform);
                }
            }
            VisualEffect appearanceEffect = monsterSpawnCellDefinition.appearanceEffect;

            if (null != appearanceEffect)
            {
                Object.Instantiate <VisualEffect>(appearanceEffect, position, rotation, transform);
                float appearanceDelay = monsterSpawnCellDefinition.appearanceDelay;
                if (appearanceDelay > 0f)
                {
                    yield return((object)new WaitForTime(appearanceDelay));
                }
            }
            GameObject val3 = monsterSpawnCellDefinition.Instantiate(position, rotation, cellObject.get_transform());

            if (!(null == val3))
            {
                val3.GetComponent <SpawnCellObject>().SetDirection(direction);
                m_monsterSpawnCellDictionary.Add(index, val3);
            }
        }
Beispiel #3
0
        public IEnumerator Initialize()
        {
            CameraHandler.AddMapRotationListener(OnMapRotationChanged);
            FightStatus local       = FightStatus.local;
            int         regionCount = m_mapDefinition.regionCount;

            m_movementContexts = new FightMapMovementContext[regionCount];
            for (int i = 0; i < regionCount; i++)
            {
                FightStatus fightStatus = FightLogicExecutor.GetFightStatus(i);
                fightStatus.EntitiesChanged += OnEntitiesChanged;
                FightMapMovementContext fightMapMovementContext = new FightMapMovementContext(fightStatus.mapStatus, fightStatus);
                if (fightStatus == local)
                {
                    m_localMovementContext = fightMapMovementContext;
                }
                m_movementContexts[i] = fightMapMovementContext;
            }
            if (m_localMovementContext != null)
            {
                IMapStateProvider stateProvider = m_localMovementContext.stateProvider;
                m_targetContext = new FightMapTargetContext(stateProvider);
            }
            BoxCollider mapCollider = CreateCollider();

            InitializeHandlers(mapCollider, giveUserControl: false);
            MonsterSpawnCellDefinition monsterSpawnCellDefinition = m_bossFightMapResources.monsterSpawnCellDefinition;

            if (null != monsterSpawnCellDefinition)
            {
                yield return(monsterSpawnCellDefinition.Initialize());

                m_monsterSpawnCellDictionary = new Dictionary <int, GameObject>();
            }
            if (AudioManager.isReady)
            {
                m_audioContext.Initialize();
                m_worldMusicRequest = AudioManager.LoadWorldMusic(m_musicGroup, m_ambianceGroup, m_audioContext);
                while (m_worldMusicRequest.state == AudioWorldMusicRequest.State.Loading)
                {
                    yield return(null);
                }
            }
        }
Beispiel #4
0
        public IEnumerator RemoveMonsterSpawnCell(int x, int y)
        {
            MonsterSpawnCellDefinition monsterSpawnCellDefinition = m_bossFightMapResources.monsterSpawnCellDefinition;

            if (null == monsterSpawnCellDefinition)
            {
                yield break;
            }
            int cellIndex = m_mapDefinition.GetCellIndex(x, y);

            if (!m_monsterSpawnCellDictionary.TryGetValue(cellIndex, out GameObject instance))
            {
                yield break;
            }
            m_monsterSpawnCellDictionary.Remove(cellIndex);
            Transform transform = instance.get_transform();

            if (AudioManager.isReady)
            {
                AudioReference disappearanceSound = monsterSpawnCellDefinition.disappearanceSound;
                if (disappearanceSound.get_isValid())
                {
                    AudioManager.PlayOneShot(disappearanceSound, transform);
                }
            }
            VisualEffect disappearanceEffect = monsterSpawnCellDefinition.disappearanceEffect;

            if (null != disappearanceEffect)
            {
                Object.Instantiate <VisualEffect>(disappearanceEffect, transform.get_position(), transform.get_rotation(), transform.get_parent());
                float disappearanceDelay = monsterSpawnCellDefinition.disappearanceDelay;
                if (disappearanceDelay > 0f)
                {
                    yield return((object)new WaitForTime(disappearanceDelay));
                }
            }
            monsterSpawnCellDefinition.DestroyInstance(instance);
        }
Beispiel #5
0
        public void Release()
        {
            CameraHandler.RemoveMapRotationListener(OnMapRotationChanged);
            if (FightLogicExecutor.isValid)
            {
                int regionCount = m_mapDefinition.regionCount;
                for (int i = 0; i < regionCount; i++)
                {
                    FightStatus fightStatus = FightLogicExecutor.GetFightStatus(i);
                    if (fightStatus != null)
                    {
                        fightStatus.EntitiesChanged -= OnEntitiesChanged;
                    }
                }
            }
            MonsterSpawnCellDefinition monsterSpawnCellDefinition = m_bossFightMapResources.monsterSpawnCellDefinition;

            if (null != monsterSpawnCellDefinition)
            {
                foreach (GameObject value in m_monsterSpawnCellDictionary.Values)
                {
                    monsterSpawnCellDefinition.DestroyInstance(value);
                }
                m_monsterSpawnCellDictionary.Clear();
                m_monsterSpawnCellDictionary = null;
                monsterSpawnCellDefinition.Release();
            }
            if (AudioManager.isReady)
            {
                m_audioContext.Release();
            }
            m_worldMusicRequest     = null;
            m_movementContexts      = null;
            m_localMovementContext  = null;
            m_activeMovementContext = null;
            m_targetContext         = null;
        }