示例#1
0
        public static List <TerrainPointInfo> CreateTerrainPointInfo(float range, float highest, FieldMaterialType materialType = FieldMaterialType.None, int?seeds = null)
        {
            var baseRange   = range;
            var baseHighest = highest;

            List <TerrainPointInfo> list = new List <TerrainPointInfo>();
            int layer = (int)(highest * heightRate / range) + 1;

            Debug.LogFormat("Layer:{0}", layer);

            float lowest   = highest / 2;
            float tileSize = 1.5f;

            for (int i = 0; i < layer; i++)
            {
                list.Add(new TerrainPointInfo
                {
                    HighestHillHeight = highest,
                    LowestHillHeight  = lowest,
                    TileSize          = tileSize,
                    Seeds             = seeds == null ? UnityEngine.Random.Range(0, 999): seeds.Value,
                    Range             = range,
                    MatType           = materialType,
                });

                var rate = i > 2 ? shrinkDetailRate: shrinkRate;
                highest  *= rate;
                lowest    = -highest;
                tileSize /= rate;
                range    /= rate;
            }

            //Debug.LogFormat("Range:{0} Highest:{1} PointsCount:{2}", baseRange, baseHighest, list.Count);

            return(list);
        }
示例#2
0
        public static EntityTemplate CreateFieldEntityTemplate(Coordinates coords, float range, float highest, FieldMaterialType materialType = FieldMaterialType.None, int?seeds = null)
        {
            var template = new EntityTemplate();

            template.AddComponent(new Position.Snapshot(coords), WorkerUtils.UnityGameLogic);
            template.AddComponent(new Metadata.Snapshot("Ground"), WorkerUtils.UnityGameLogic);
            template.AddComponent(new Persistence.Snapshot(), WorkerUtils.UnityGameLogic);
            template.AddComponent(new FieldComponent.Snapshot {
                TerrainPoints = CreateTerrainPointInfo(range, highest, materialType, seeds)
            }, WorkerUtils.UnityGameLogic);

            template.SetReadAccess(WorkerUtils.AllWorkerAttributes.ToArray());
            template.SetComponentWriteAccess(EntityAcl.ComponentId, WorkerUtils.UnityGameLogic);

            return(template);
        }