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);
        }
Exemple #3
0
        public static GrassType GetGrassType(string name)
        {
            InitializeGrassLibrary();
            if (name == null)
            {
                return(null);
            }
            GrassType r = null;

            GrassTypes.TryGetValue(name, out r);
            return(r);
        }
Exemple #4
0
        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));
            }
        }