Пример #1
0
        async void SpawnUnits(string unit_prefab, FieldBounds bounds, int count, uint team_index)
        {
            var battleground = Game.GetBattleground();
            var tilemap      = battleground.GetMainTilemap();

            var points = bounds.GetAllPoints();

            points.Shuffle();

            if (points.Count < count)
            {
                Debug.LogWarning($"Can't spawn {count} units, trim to free points count.");
                count = points.Count;
            }

            for (int i = 0; i < count; i++)
            {
                var asset = await Assets.LoadAsync(unit_prefab);

                var unit = asset.AddComponentOnce <BattleUnit>();
                unit.Init(team_index);

                var cell_x = Mathf.RoundToInt(points[i].x);
                var cell_y = Mathf.RoundToInt(points[i].y);

                var point     = new Vector3Int(cell_x, cell_y, 0);
                var world_pos = tilemap.CellToWorld(point);
                world_pos.x += Battleground.UNIT_WORLD_POS_OFFSET_X;
                world_pos.y += Battleground.UNIT_WORLD_POS_OFFSET_Y;

                unit.transform.position = world_pos;

                battleground.AddUnit(unit);
            }
        }
Пример #2
0
        public async UniTask Load()
        {
            var location = await Assets.TryReuseAsync("Prefabs/location");

            Error.Assert(location != null, "Location loading failed.");

            var main_tilemap_go = location.GetChild("grid/battleground_tilemap");

            main_tilemap = main_tilemap_go.GetComponent <Tilemap>();

            var decor_tilemap_go = location.GetChild("grid/decor_tilemap");

            decor_tilemap = decor_tilemap_go.GetComponent <Tilemap>();

            Error.Assert(main_tilemap_go != null && decor_tilemap != null, "Tilemaps init failed.");

            pathfinder = new Pathfinder(this, main_tilemap, decor_tilemap, bounds);

            walkable_points.AddRange(bounds.GetAllPoints());

            is_loaded = true;
        }