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