public static int RetriveGrassTypeIndex(GrassType type) { switch (type) { case GrassType.Debug1: return(0); case GrassType.Debug2: return(1); } Preconditions.Fail("unsupported grass type " + type); return(-1); }
public GameObject GetType(GrassType type) { if (type == GrassType.normal) { return(normalTile); } else if (type == GrassType.mine) { return(mineTile); } return(null); }
public Grass builder(GrassType type, Vector2 location) { factory = new SpriteFactory(); if (type == GrassType.shortGrass) { state = new GrassTileState(SpriteFactory.sprites.grass); } if (type == GrassType.tallGrass) { state = new GrassTileState(SpriteFactory.sprites.grass); } Grass product = new Grass(state, location); return product; }
public Grass builder(GrassType type, Vector2 location) { factory = new SpriteFactory(); if (type == GrassType.shortGrass) { state = new GrassTileState(SpriteFactory.sprites.grass); } if (type == GrassType.tallGrass) { state = new GrassTileState(SpriteFactory.sprites.grass); } Grass product = new Grass(state, location); return(product); }
public override int GenerateLandLayer(WorldGenerator worldGenerator, ILandChunk landChunk, IntRect area, int seed, int minAltitude, int maxAltitude) { ALandLayerGenerator grassLandLayerGenerator = worldGenerator.Generators["grass"]; ALandLayerGenerator altitudeLandLayerGenerator = worldGenerator.Generators["altitude"]; ALandLayerGenerator cliffLandLayerGenerator = worldGenerator.Generators["cliff"]; ALandLayerGenerator elementLandLayerGenerator = worldGenerator.Generators["element"]; bool isThereGrassElement = false; Random random = new Random(seed); for (int i = 0; i < area.Height; i++) { for (int j = 0; j < area.Width; j++) { int altitude = altitudeLandLayerGenerator.GetComputedPowerAt(j, i); int altitudeOffset = cliffLandLayerGenerator.GetComputedPowerAt(j, i); int elementIndex = random.Next(0, 12); int power = this.GetElementPower(elementLandLayerGenerator.GetComputedPowerAt(j, i)); GrassType grassType = (GrassType)grassLandLayerGenerator.GetComputedPowerAt(j, i); if (power >= 2 && random.Next(0, 3) > 0 && altitudeOffset == 0 && grassType != GrassType.NONE) { GrassElementLandObject grassElement = new GrassElementLandObject(area.Left + j, area.Top + i, altitude, grassType, elementIndex); LandCase landCase = landChunk.GetLandCase(i, j, altitude); landCase.LandOverGround = grassElement; isThereGrassElement = true; } } } if (isThereGrassElement) { landChunk.AddTypeInChunk(typeof(GrassElementLandObject)); } return(random.Next()); }
private static void GenerateHangingCornerFringe( RawPrimitive Into, Geo.TemplateFace Face, TerrainTileSheet TileSheet, SliceCache Cache, GrassType decalType, Geo.TemplateCorner Corner, Vector3 Sag) { var vertex = Cache.FaceGeometry[Corner.Vertex]; Cache.TempVerticies[0] = new ExtendedVertex( vertex.Position, vertex.Color, vertex.VertColor, TileSheet.MapTileUVs(new Vector2(0.0f, 0.0f), decalType.FringeTiles[2]), TileSheet.GetTileBounds(decalType.FringeTiles[2])); Cache.TempVerticies[1] = new ExtendedVertex( Cache.EdgeFringeTempVerticies[Corner.EdgeA].Set ? Cache.EdgeFringeTempVerticies[Corner.EdgeA].End : (vertex.Position + OrientationHelper.GetFaceNeighborOffset(Face.Edges[Corner.EdgeA].Orientation).AsVector3() * 0.5f + Sag), vertex.Color, vertex.VertColor, TileSheet.MapTileUVs(new Vector2(0.5f, 0.0f), decalType.FringeTiles[2]), TileSheet.GetTileBounds(decalType.FringeTiles[2])); Cache.TempVerticies[2] = new ExtendedVertex( vertex.Position + OrientationHelper.GetFaceNeighborOffset(Face.Edges[Corner.EdgeA].Orientation).AsVector3() * 0.5f + OrientationHelper.GetFaceNeighborOffset(Face.Edges[Corner.EdgeB].Orientation).AsVector3() * 0.5f + Sag, vertex.Color, vertex.VertColor, TileSheet.MapTileUVs(new Vector2(0.5f, 0.5f), decalType.FringeTiles[2]), TileSheet.GetTileBounds(decalType.FringeTiles[2])); Cache.TempVerticies[3] = new ExtendedVertex( Cache.EdgeFringeTempVerticies[Corner.EdgeB].Set ? Cache.EdgeFringeTempVerticies[Corner.EdgeB].Start : (vertex.Position + OrientationHelper.GetFaceNeighborOffset(Face.Edges[Corner.EdgeB].Orientation).AsVector3() * 0.5f + Sag), vertex.Color, vertex.VertColor, TileSheet.MapTileUVs(new Vector2(0.0f, 0.5f), decalType.FringeTiles[2]), TileSheet.GetTileBounds(decalType.FringeTiles[2])); AddQuad(Into, Cache.TempVerticies, QuadIndicies); }
private static void GenerateEdgeFringe( RawPrimitive Into, Geo.TemplateFace Face, int EdgeIndex, TerrainTileSheet TileSheet, SliceCache Cache, GrassType decalType, Vector3 Sag, float Scale) { var start = Cache.FaceGeometry[Face.Edges[EdgeIndex].Start]; var end = Cache.FaceGeometry[Face.Edges[EdgeIndex].End]; Cache.EdgeFringeTempVerticies[EdgeIndex].Set = true; Cache.TempVerticies[0] = new ExtendedVertex( start.Position, start.Color, start.VertColor, TileSheet.MapTileUVs(new Vector2(0.0f, 0.0f), decalType.FringeTiles[0]), TileSheet.GetTileBounds(decalType.FringeTiles[0])); Cache.TempVerticies[1] = new ExtendedVertex( end.Position, end.Color, end.VertColor, TileSheet.MapTileUVs(new Vector2(1.0f, 0.0f), decalType.FringeTiles[0]), TileSheet.GetTileBounds(decalType.FringeTiles[0])); Cache.EdgeFringeTempVerticies[EdgeIndex].End = end.Position + OrientationHelper.GetFaceNeighborOffset(Face.Edges[EdgeIndex].Orientation).AsVector3() * Scale + Sag; Cache.TempVerticies[2] = new ExtendedVertex( Cache.EdgeFringeTempVerticies[EdgeIndex].End, end.Color, end.VertColor, TileSheet.MapTileUVs(new Vector2(1.0f, 0.5f), decalType.FringeTiles[0]), TileSheet.GetTileBounds(decalType.FringeTiles[0])); Cache.EdgeFringeTempVerticies[EdgeIndex].Start = start.Position + OrientationHelper.GetFaceNeighborOffset(Face.Edges[EdgeIndex].Orientation).AsVector3() * Scale + Sag; Cache.TempVerticies[3] = new ExtendedVertex( Cache.EdgeFringeTempVerticies[EdgeIndex].Start, start.Color, start.VertColor, TileSheet.MapTileUVs(new Vector2(0.0f, 0.5f), decalType.FringeTiles[0]), TileSheet.GetTileBounds(decalType.FringeTiles[0])); AddQuad(Into, Cache.TempVerticies, QuadIndicies); }
public GrassGroupId AddGrassGroup(MyRectangle generationArea, GrassType type, IIntensitySamplingProvider intensityProvider) { var instancesPerUnitSquare = _templatesDictionary[type].InstancesPerUnitSquare; var flatPositions = _positionResolver.ResolvePositions(generationArea, intensityProvider, instancesPerUnitSquare); var spotId = _designBodiesChangeListener.RegisterBodiesGroup(flatPositions); var grassGroupId = GrassGroupId.GenerateNext; _spotIdToGrassGroupId.Add(spotId, grassGroupId); var groupWaitingToBePlantedInfo = new GroupWaitingToBePlanted() { FlatPositions = flatPositions, Type = type }; _groupsWaitingToBePlanted[spotId] = groupWaitingToBePlantedInfo; return(grassGroupId); }
public GrassElementLandObject(int positionX, int positionY, int positionZ, GrassType grassType, int elementIndex) : base(positionX, positionY, positionZ) { this.LandGrassType = grassType; this.ElementIndex = elementIndex; }
private static void GenerateGrassFringe(RawPrimitive Into, VoxelHandle Voxel, Geo.TemplateFace Face, TerrainTileSheet TileSheet, SliceCache Cache, GrassType decalType) { for (var i = 0; i < 4; ++i) { Cache.EdgeFringeTempVerticies[i].Set = false; } if (Face.Edges != null) { for (var e = 0; e < Face.Edges.Length; ++e) { var fringeNeighbor = VoxelHelpers.GetNeighbor(Voxel, OrientationHelper.GetFaceNeighborOffset(Face.Edges[e].Orientation)); if (fringeNeighbor.IsValid) { if (fringeNeighbor.IsEmpty) { GenerateEdgeFringe(Into, Face, e, TileSheet, Cache, decalType, new Vector3(0.0f, -0.5f, 0.0f), 0.5f); } else { var above = VoxelHelpers.GetVoxelAbove(fringeNeighbor); if (above.IsValid && !above.IsEmpty) { GenerateEdgeFringe(Into, Face, e, TileSheet, Cache, decalType, new Vector3(0.0f, 0.5f, 0.0f), -0.1f); } else if (fringeNeighbor.GrassType == 0 || (fringeNeighbor.GrassType != Voxel.GrassType && Library.GetGrassType(fringeNeighbor.GrassType).FringePrecedence < decalType.FringePrecedence)) { GenerateEdgeFringe(Into, Face, e, TileSheet, Cache, decalType, new Vector3(0.0f, 0.2f, 0.0f), 0.5f); } } } } } if (Face.Corners != null) { for (var c = 0; c < Face.Corners.Length; ++c) { var cornerNeighbor = VoxelHelpers.GetNeighbor(Voxel, OrientationHelper.GetFaceNeighborOffset(Face.Edges[Face.Corners[c].EdgeA].Orientation) + OrientationHelper.GetFaceNeighborOffset(Face.Edges[Face.Corners[c].EdgeB].Orientation)); var manhattanA = VoxelHelpers.GetNeighbor(Voxel, OrientationHelper.GetFaceNeighborOffset(Face.Edges[Face.Corners[c].EdgeA].Orientation)); var manhattanB = VoxelHelpers.GetNeighbor(Voxel, OrientationHelper.GetFaceNeighborOffset(Face.Edges[Face.Corners[c].EdgeB].Orientation)); if (manhattanA.IsValid && !manhattanA.IsEmpty && manhattanA.GrassType == Voxel.GrassType) { continue; } if (manhattanB.IsValid && !manhattanB.IsEmpty && manhattanB.GrassType == Voxel.GrassType) { continue; } if (cornerNeighbor.IsValid) { if (cornerNeighbor.IsEmpty) // Todo: Do not generate fringe if horizontal neighbors are occupied. // Todo: Also - needs to use corners set by edge fringe when they are at different heights. Maybe specify which edges the corner is in between? { GenerateHangingCornerFringe(Into, Face, TileSheet, Cache, decalType, Face.Corners[c], new Vector3(0.0f, -0.5f, 0.0f)); } else { var above = VoxelHelpers.GetVoxelAbove(cornerNeighbor); if (above.IsValid && !above.IsEmpty) { } else if (cornerNeighbor.GrassType == 0 || (cornerNeighbor.GrassType != Voxel.GrassType && Library.GetGrassType(cornerNeighbor.GrassType).FringePrecedence < decalType.FringePrecedence)) { GenerateHangingCornerFringe(Into, Face, TileSheet, Cache, decalType, Face.Corners[c], new Vector3(0.0f, 0.1f, 0.0f)); } } } } } }
public GrassLandObject(int positionX, int positionY, int positionZ, GrassType grassType) : base(positionX, positionY, positionZ, LandType.GRASS) { this.LandGrassType = grassType; }
public override int GenerateLandLayer(WorldGenerator worldGenerator, ILandChunk landChunk, IntRect area, int seed, int minAltitude, int maxAltitude) { ALandLayerGenerator altitudeLandLayerGenerator = worldGenerator.Generators["altitude"]; ALandLayerGenerator cliffLandLayerGenerator = worldGenerator.Generators["cliff"]; bool[,] subArea = new bool[3, 3]; bool isThereGrass = false; this.ConstructGrassArea(worldGenerator, area); for (int i = 0; i < area.Height; i++) { for (int j = 0; j < area.Width; j++) { int altitude = altitudeLandLayerGenerator.GetComputedPowerAt(j, i); int altitudeOffset = cliffLandLayerGenerator.GetComputedPowerAt(j, i); if ((altitude > -2 || (altitude == -2 && altitudeOffset > 0)) && altitude < 7) { LandCreationHelper.GetComputedLandType(this, area, i, j, out int grassTypeInt, out int secondTypeInt, out LandTransition landTransition, out LandTransition secondLandTransition); //this.GetComputedLandType(area, i, j, out GrassType grassType, out GrassType secondType, out LandTransition landTransition, out LandTransition secondLandTransition); GrassType grassType = (GrassType)grassTypeInt; GrassType secondType = (GrassType)secondTypeInt; GroundLandObject groundLandObject = null; GroundLandObject secondGroundLandObject = null; if (grassType != GrassType.NONE) { groundLandObject = new GrassLandObject(area.Left + j, area.Top + i, altitude, grassType); groundLandObject.SetTransition(landTransition); isThereGrass = true; } if (secondType != grassType && secondType != GrassType.NONE) { secondGroundLandObject = new GrassLandObject(area.Left + j, area.Top + i, 0, secondType); secondGroundLandObject.SetTransition(secondLandTransition); isThereGrass = true; } bool onlyGround = altitude == 6 && altitudeOffset > 0; AssignGround(landChunk, i, j, altitude, altitudeOffset, groundLandObject, secondGroundLandObject, onlyGround); } } } if (isThereGrass) { landChunk.AddTypeInChunk(typeof(GrassLandObject)); } return(seed); }