예제 #1
0
        private IEnumerator GetMapList()
        {
            while (!_campaign)
            {
                yield return(null);
            }

            while (_campaign.maps.Count == 0)
            {
                yield return(null);
            }

            while (!_campaign.activeMap)
            {
                yield return(null);
            }

            _cachedId        = _campaign.activeMap.id;
            _cachedMapsCount = _campaign.mapsInfo.Count;

            while (true)
            {
                foreach (Transform child in mapItemsParent)
                {
                    Destroy(child.gameObject);
                }

                currentMapInput.text = _campaign.activeMap.name;
                foreach (var mapData in _campaign.mapsInfo)
                {
                    var mapItem = Instantiate(mapItemPrefab, mapItemsParent).GetComponent <MapItem>();
                    mapItem.mapName.text = $"{mapData.name}";
                    mapItem.selected.SetActive(_campaign.activeMap.id == mapData.id);
                    mapItem.deleteMapButton.gameObject.SetActive(_campaign.activeMap.id != mapData.id);
                    mapItem.changeMapButton.gameObject.SetActive(_campaign.activeMap.id != mapData.id);
                    mapItem.deleteMapButton.onClick.AddListener(delegate { StartCoroutine(DeleteMap(mapData.id)); });
                    mapItem.changeMapButton.onClick.AddListener(delegate { StartCoroutine(_campaign.ChangeActiveMap(mapData.id)); });
                    mapItem.changeAllMapButton.onClick.AddListener(delegate { ChangeAllMapButton(mapData.id); });
                }

                while (_cachedMapsCount == _campaign.mapsInfo.Count &&
                       _cachedId == _campaign.activeMap.id &&
                       !_resetMapList)
                {
                    yield return(null);
                }

                _cachedId        = _campaign.activeMap.id;
                _cachedMapsCount = _campaign.mapsInfo.Count;
                _resetMapList    = false;
            }
        }
예제 #2
0
    public void ResolveAction(Action action)
    {
        if (action.players.Any())
        {
            var player = campaign.playersInfo.FirstOrDefault(x => x.name == Campaign.playerName);
            if (player != null && !action.players.Contains(player.id))
            {
                return;
            }
        }

        if (action.map.Any() && action.map != campaign.activeMap.id)
        {
            return;
        }

        try
        {
            switch (action.name)
            {
            // campaign actions
            case ActionNames.AddMessage:
                var strings = action.strings;
                Chat.instance.NewMessage(strings[0], strings[1], strings[2], strings[3]);
                break;

            // map actions
            case ActionNames.ChangeMap:
                StartCoroutine(campaign.ChangeActiveMap(action.strings[0]));
                break;

            case ActionNames.RefreshPermissions:
                StartCoroutine(RefreshPermissionsCoroutine());
                break;

            // tiles actions
            case ActionNames.ChangeTiles:
                ChangeTiles(action.tiles);
                break;

            case ActionNames.ShowTiles:
                if (!Campaign.playerIsMaster)
                {
                    ShowTiles(action.strings[0]);
                }
                break;

            case ActionNames.HideTiles:
                if (!Campaign.playerIsMaster)
                {
                    HideTiles(action.strings[0]);
                }
                break;

            // entity actions
            case ActionNames.ChangeEntity:
                foreach (var entity in action.entities)
                {
                    ChangeEntity(entity);
                }
                break;

            case ActionNames.DeleteEntity:
                foreach (var entity in action.entities)
                {
                    DeleteEntity(entity);
                }
                break;
            }
        }
        catch (Exception e)
        {
            Debug.LogError($"Action (name={action.name}, map={action.map}) throws error: {e}");
        }
        finally
        {
            action.done = true;
        }
    }