public static void InitializeDefaultLibrary() { TypeList = FileUtils.LoadJsonListFromMultipleSources <GrassType>(ContentPaths.grass_types, null, g => g.Name); emptyType = TypeList[0]; byte ID = 0; foreach (var type in TypeList) { type.ID = ID; ++ID; Types[type.Name] = type; if (type.FringeTiles != null) { type.FringeTransitionUVs = CreateFringeUVs(type.FringeTiles); } if (type.InitialDecayValue > VoxelConstants.MaximumGrassDecay) { type.InitialDecayValue = VoxelConstants.MaximumGrassDecay; Console.WriteLine("Grass type " + type.Name + " with invalid InitialDecayValue"); } } if (ID > 16) { Console.WriteLine("Allowed number of grass types exceeded. Limit is " + VoxelConstants.MaximumGrassTypes); } }
public static GrassType GetGrassType(string name) { if (name == null) { return(null); } GrassType r = null; Types.TryGetValue(name, out r); return(r); }
public static GrassType GetGrassType(string name) { InitializeGrassLibrary(); if (name == null) { return(null); } GrassType r = null; GrassTypes.TryGetValue(name, out r); return(r); }
public static void InitializeDefaultLibrary() { TypeList = FileUtils.LoadJson <List <GrassType> >(ContentPaths.grass_types, false); emptyType = TypeList[0]; byte ID = 0; foreach (var type in TypeList) { type.ID = ID; ++ID; Types[type.Name] = type; if (type.FringeTiles != null) { type.FringeTransitionUVs = CreateFringeUVs(type.FringeTiles); } } }
private static void AddGrassGeometry( RawPrimitive Into, int[] AmbientScratchSpace, BoxPrimitive Primitive, VoxelHandle V, BoxPrimitive.FaceDescriptor faceDescriptor, int exploredVerts, Vector3[] VertexPositions, VertexColorInfo[] VertexColors, Color[] VertexTints, GrassType Decal) { var indexOffset = Into.VertexCount; var UV = new Vector2(Decal.Tile.X * (1.0f / 16.0f), Decal.Tile.Y * (1.0f / 16.0f)); var UVBounds = new Vector4(UV.X + 0.001f, UV.Y + 0.001f, UV.X + (1.0f / 16.0f) - 0.001f, UV.Y + (1.0f / 16.0f) - 0.001f); for (int faceVertex = 0; faceVertex < faceDescriptor.VertexCount; faceVertex++) { var vertex = Primitive.Vertices[faceDescriptor.VertexOffset + faceVertex]; AmbientScratchSpace[faceVertex] = VertexColors[faceVertex].AmbientColor; Into.AddVertex(new ExtendedVertex( VertexPositions[faceVertex] + VertexNoise.GetNoiseVectorFromRepeatingTexture(VertexPositions[faceVertex]), VertexColors[faceVertex].AsColor(), VertexTints[faceVertex], UV + new Vector2(vertex.Position.X / 16.0f, vertex.Position.Z / 16.0f), UVBounds)); } bool flippedQuad = AmbientScratchSpace[0] + AmbientScratchSpace[2] > AmbientScratchSpace[1] + AmbientScratchSpace[3]; for (int idx = faceDescriptor.IndexOffset; idx < faceDescriptor.IndexCount + faceDescriptor.IndexOffset; idx++) { ushort offset = flippedQuad ? Primitive.FlippedIndexes[idx] : Primitive.Indexes[idx]; ushort offset0 = flippedQuad ? Primitive.FlippedIndexes[faceDescriptor.IndexOffset] : Primitive.Indexes[faceDescriptor.IndexOffset]; Into.AddIndex((short)(indexOffset + offset - offset0)); } }