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); }
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? }