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);
        }
        protected override void update_geometry()
        {
            if (rootGO == null)
            {
                return;
            }

            (backgroundGO as fDiscGameObject).SetRadius(radius);
            (progressGO as fDiscGameObject).SetRadius(0.95f * radius);

            double fT = Progress / MaxProgress;

            progressGO.SetStartAngleDeg(90 - MathUtil.Clamp((float)(360 * fT), 1.0f, 359.999f));
        }
        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();
        }