Esempio n. 1
0
        /// <summary>
        /// Billboard blocks
        /// </summary>
        /// <param name="bbSet">We pass the bbset block, not the whole thingDefinition</param>
        void ParseBillboard(BillboardSetBlock bbSet, RuleInstance block)
        {
            BillboardBlock billboardBlock = new BillboardBlock(bbSet);

            for (int a = 2; a < block.Children.Length - 1; a++) {
                RuleInstance rule = block.Children[a] as RuleInstance;
                if (rule.Type == NodeType.Rule_Property)
                    ParseProperty(billboardBlock, rule.Children[0] as RuleInstance);
            }

            bbSet.BillboardBlocks.Add(billboardBlock);
        }
        /// <summary>
        /// Make one billboard from each billboard block.
        /// </summary>
        void CreateBillboard(BillboardBlock block)
        {
            // make our billboard
            Billboard bb = BillboardSet.CreateBillboard(block.GetVectorProperty("Position", null));
            // set its color if it has one
            Quaternion quat;
            if (block.QuatTokens.TryGetValue("colour", out quat))
                bb.Colour = quat.ToColourValue();
            // and a rotation
            bb.Rotation = new Degree(block.GetFloatProperty("Rotation", 0));

            Quaternion rectQ;
            if (block.QuatTokens.TryGetValue("texturecoords", out rectQ)) {
                bb.SetTexcoordRect(rectQ.x, rectQ.y, rectQ.z, rectQ.w);
            }

            // it's best to not do this unless we really need to since it makes it less efficient
            float height, width;
            if (block.FloatTokens.TryGetValue("width", out width) && block.FloatTokens.TryGetValue("height", out height))
                bb.SetDimensions(width, height);
        }