public static fDiscGameObject CreateDiscGO(string sName, float fRadius, float fStartAngleDeg, float fEndAngleDeg, fMaterial material, bool bShareMaterial, bool bCollider)
        {
            GameObject go       = new GameObject(sName);
            fMesh      discMesh = PrimitiveCache.GetPrimitiveMesh(fPrimitiveType.Disc);

            initialize_meshgo(go, discMesh, bCollider, true);
            go.SetMaterial(material, bShareMaterial);
            fDiscGameObject discGO = new fDiscGameObject(go, new fMesh(go.GetSharedMesh()), fRadius);

            discGO.SetStartAngleDeg(fStartAngleDeg);
            discGO.SetEndAngleDeg(fEndAngleDeg);
            return(discGO);
        }
        public override void Create()
        {
            base.Create();

            backgroundGO = GameObjectFactory.CreateDiscGO(rootGO.GetName() + "_bg",
                                                          radius, bgColor, true);
            MaterialUtil.DisableShadows(backgroundGO);
            backgroundGO.RotateD(Vector3f.AxisX, -90.0f);   // make vertical
            AppendNewGO(backgroundGO, rootGO, false);

            progressGO = GameObjectFactory.CreateDiscGO(rootGO.GetName() + "_progress",
                                                        radius, completedColor, true);
            progressGO.SetStartAngleDeg(89.0f);
            progressGO.SetEndAngleDeg(90.0f);

            MaterialUtil.DisableShadows(progressGO);
            progressGO.RotateD(Vector3f.AxisX, -90.0f);   // make vertical
            progressGO.Translate(0.001f * Vector3f.AxisY, true);
            AppendNewGO(progressGO, rootGO, false);

            update_geometry();
        }