예제 #1
0
        public virtual bool IsBuildingAllowedHere(TileMapState state, Vector3Int cell)
        {
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    var      v3   = new Vector3Int(cell.x + i, cell.y + j, 0);
                    TileBase tile = state.tilemap.GetTile(v3);

                    if (!tile || state.buildingCoords.ContainsKey(v3))
                    {
                        return(false);
                    }

                    if (!MapController.Instance.CheckTileString(tile, requiredString))
                    {
                        return(false);
                    }

                    // if (!requiredAtLeastOneOfString.IsNullOrEmpty() &&
                    //     MapController.Instance.CheckTileString(tile, requiredAtLeastOneOfString))
                    // {
                    //
                    // }
                }
            }
            return(true);
        }
예제 #2
0
    private void Start()
    {
        buildings = new List <Building>();
        for (int k = 0; k < tilemaps.Length; k++)
        {
            TileMapState state = tilemaps[k];

            if (state.explored)
            {
                continue;
            }
            else
            {
                for (int i = -64; i < 64; i++)
                {
                    for (int j = -64; j < 64; j++)
                    {
                        Vector3Int cell = new Vector3Int(i, j, 0);

                        if (state.tilemap.HasTile(cell))
                        {
                            Animator          anim = Instantiate(steamCloud, state.tilemap.CellToWorld(cell).PlusY(-0.5f), Quaternion.identity, transform);
                            AnimatorStateInfo info = anim.GetCurrentAnimatorStateInfo(0);
                            anim.GetComponent <SpriteRenderer>().flipX = Random.value < 0.25f;
                            anim.Play(info.fullPathHash, -1, Random.Range(0f, 1f));
                            state.fogClouds.Add(anim.gameObject);
                        }
                    }
                }
            }
        }
    }
예제 #3
0
        public async Task SetTileMapState(JsonTileMapState jsonTileMapState)
        {
            await ConnectToContract();

            TileMapState tileMapStateTx = new TileMapState();

            tileMapStateTx.Data = JsonUtility.ToJson(jsonTileMapState);
            await this.contract.CallAsync("SetTileMapState", tileMapStateTx);
        }
예제 #4
0
        public async Task <JsonTileMapState> GetTileMapState()
        {
            await ConnectToContract();

            TileMapState result = await this.contract.StaticCallAsync <TileMapState>("GetTileMapState", new TileMapState());

            if (result == null)
            {
                throw new Exception("Smart contract didn't return anything!");
            }

            JsonTileMapState jsonTileMapState = JsonUtility.FromJson <JsonTileMapState>(result.Data);

            return(jsonTileMapState);
        }
예제 #5
0
        public void Place(TileMapState state, Vector3Int cell)
        {
            ChangeColor(Color.white);
            myTilemapState = state;
            myCell         = cell;
            MapController.Instance.buildings.Add(this);
            placed = true;
            ResourcesController.Instance.woodCount   -= woodCost;
            ResourcesController.Instance.metalsCount -= metalCost;

            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    state.buildingCoords.Add(new Vector3Int(cell.x + i, cell.y + j, 0), this);
                }
            }

            CameraController.Instance.SmallCameraShake();
            transform.DOPunchScale(Vector3.one * .1f, .33f, 1, .1f);
        }