private static List <Element> CreateCorals(Segment segment, int divisions, MySimpleTerrain floor)
        {
            var corals = segment.GenerateElements(divisions / 2, SpawnRate.Of(1, 100), CoralFactory.Instance)
                         .ToList();

            corals.ForEach(coral => coral.yPosition(floor));
            return(corals);
        }
        public FloorChunk(TGCVector3 origin) : base(origin, AquaticPhysics.Instance)
        {
            var max = origin + DefaultSize;

            this.segments = Segment.GenerateSegments(origin, max, 10);

            this.divisions = (int)(DefaultSize.X / 100);

            this.Floor     = FloorRepository.getFloor(origin);
            FloorRigidBody = TriangleShapeFactory.CreateFromHeighMap(Floor.getData());

            var corals = CreateCorals(segments[0], divisions, Floor);

            AddElementsToPhysicsWorld(corals);
            this.Elements.AddRange(corals);

            segments.Remove(segments[0]);
        }
        private static MySimpleTerrain CreateFloor(TGCVector3 origin)
        {
            var bitmap = getHeightmap(origin);

            var imgSize = bitmap.Height;
            var floor   = new MySimpleTerrain();

            var epsilon = 0.27f;
            var scaleXz = Chunk.DefaultSize.X / imgSize + epsilon * Chunk.DefaultSize.X / 1000 * imgSize / 64;
            var xCenter = origin.X + Chunk.DefaultSize.X / 2 + imgSize * 2.0f / scaleXz;
            var zCenter = origin.Z + Chunk.DefaultSize.Z / 2 + imgSize * 2.0f / scaleXz;

            origin = new TGCVector3(origin.X, origin.Y, origin.Z);

            floor.loadHeightmap(getHeightmap(origin), scaleXz, 5.5f, origin);
            floor.loadTexture(loadTexture(FloorPath));

            return(floor);
        }
Пример #4
0
        public void yPosition(MySimpleTerrain floor)
        {
            var x = this.Mesh.Position.X % Chunk.DefaultSize.X;
            var z = this.Mesh.Position.Z % Chunk.DefaultSize.Z;

            var xLength = floor.HeightmapData.GetLength(1);
            var zLength = floor.HeightmapData.GetLength(0);

            var xScale = xLength / Chunk.DefaultSize.X;
            var zScale = zLength / Chunk.DefaultSize.Z;

            var xIndex = x < 0 ? xLength - (int)Math.Abs(x * xScale) : (int)Math.Abs(x * xScale);
            var zIndex = z > 0 ? zLength - (int)Math.Abs(z * zScale) : (int)Math.Abs(z * zScale);

            var y = floor.scaled(xIndex, zIndex);

            var cube  = asCube();
            var despl = ((cube.PMax - cube.PMin).X + (cube.PMax - cube.PMin).Z) / 2;

            this.PhysicsBody.Translate(new Vector3(-despl, y, -despl));
        }
 public static void Dispose(MySimpleTerrain floor)
 {
     //TODO something?
 }