示例#1
0
        private static bool ValidateResource(ItemObj obj)
        {
            if (obj == null)
            {
                return(true);
            }

            return(obj.Item.Type == ItemType.Resource && !(obj.Item is MapResource));
        }
        public MapResourceObject[] GenerateResources(Random rand, Terrain terrain, int size)
        {
            int featureSize = size / 16;
            int halfSize    = size / 2 - 16 / 2;

            MapResourceObject[] mapResourceObjects = new MapResourceObject[featureSize * featureSize];

            for (int z = 0; z < featureSize; z++)
            {
                for (int x = 0; x < featureSize; x++)
                {
                    uint index = rand.NextUInt(0, 5);

                    ItemObj[] resources;

                    switch (index)
                    {
                    default:
                        continue;

                    case 0:
                        resources = ironResources;
                        break;

                    case 1:
                        resources = copperResources;
                        break;

                    case 2:
                        resources = coalResources;
                        break;
                    }

                    if (resources.Length == 0)
                    {
                        continue;
                    }

                    ItemObj obj = resources[rand.NextInt(0, resources.Length)];

                    switch (obj.Item)
                    {
                    case MapResource resourceObject:
                    {
                        MapResourceObject instance = mapResourceObjects[x + z * featureSize] =
                            Instantiate(resourcePrefab, transform);
                        Vector3 pos = new Vector3(x * 16 - halfSize, 0, z * 16 - halfSize);
                        pos.y = terrain.SampleHeight(pos);

                        Quaternion rotation = Quaternion.Euler(0, rand.NextFloat(-180, 180), 0);

                        instance.Init(pos, rotation, obj.Item as MapResource, rand.NextUInt(3000, 6000));
                        break;
                    }

                    case Factory factory:

                        break;
                    }
                }
            }

            return(mapResourceObjects);
        }