示例#1
0
    public static Scene MakeTestPlane3D()
    {
        var scene = new SceneWith3DCameraAndPlane();

        var camera_toggle_button = new Label()
        {
            Position = new Vector2(-14.0f, 0.0f),
            FontMap  = UIFontMap
        };

        scene.Plane.AddChild(camera_toggle_button);

        {
            int          n        = 5;
            ChainedLabel prevnode = null;
            for (int i = 0; i < n; ++i)
            {
                var node = new ChainedLabel(prevnode, scene, scene.Plane, n == 1?0.0f:(float)i / (float)(n - 1), n == 1?0:n - 1 - i);
                prevnode = node;
            }
        }

        camera_toggle_button.Schedule((dt) =>

        {
            // update text size based on current view
            camera_toggle_button.HeightScale = Director.Instance.CurrentScene.Camera.GetPixelSize();
            camera_toggle_button.Color       = Colors.White;

            if (Input2.Touch00.Press && camera_toggle_button.IsWorldPointInsideContentLocalBounds(camera_toggle_button.GetTouchPos()))
            {
                camera_toggle_button.Color   = Colors.Green;
                scene.ToggleCameraTypeSignal = true;
            }

            camera_toggle_button.Text = "Click to toggle camera type\ncurrent: " + Director.Instance.CurrentScene.Camera.GetType().ToString();

            camera_toggle_button.Color = Input2.Touch00.Down && camera_toggle_button.IsWorldPointInsideContentLocalBounds(camera_toggle_button.GetTouchPos())
                                ? Colors.Red
                                : Colors.White;
        }
                                      );

        return(scene);
    }
示例#2
0
        public ChainedLabel(ChainedLabel target, Scene scene, Plane3D parent, float alpha, int order)
            : base()
        {
            if (alpha != 0.0f)
            {
                alpha = Math.Lerp(0.2f, 1.0f, alpha);
            }

            FontMap     = LargeFontMap;
            HeightScale = scene.Camera.GetPixelSize();
            Color       = Math.Lerp(Colors.White, Colors.Grey60, alpha);

            VertexZ = 1.0f;

            Text = "Label.VertexZ=" + VertexZ;

            Shadow = new Label()
            {
                FontMap = LargeFontMap, Color = Colors.Grey05
            };
            Shadow.HeightScale = HeightScale;
            Shadow.Text        = Text;

            Target = target;

            Schedule((dt) =>

            {
                if (Target == null)
                {
                    // head node

                    this.Position = m_center + m_radius * new Vector2(FMath.Cos((float)Director.Instance.DirectorTime * 0.5f * 2.033f),
                                                                      FMath.Cos((float)Director.Instance.DirectorTime * 0.5f * 0.98033f + 0.5f));

                    Vector2 touch_pos = Director.Instance.CurrentScene.Camera.GetTouchPos();

                    // you can drag the Label

                    if (Input2.Touch00.Down)
                    {
                        if (Input2.Touch00.Press
                            // not that since we set VertexZ and have used a perspective in this particular test scene,
                            // the picking here won't be very precise
                            && this.IsWorldPointInsideContentLocalBounds(touch_pos))
                        {
                            m_dragged           = true;
                            m_drag_start        = touch_pos;
                            m_center            = this.Position;                          // this is our new position, we zero the cosine offset too
                            m_radius            = 0.0f;
                            m_drag_start_center = m_center;
                        }

                        if (m_dragged)
                        {
                            m_center = m_drag_start_center + (touch_pos - m_drag_start);
                            m_radius = 0.0f;
                        }
                    }
                    else
                    {
                        m_dragged = false;
                        m_radius += (m_radius_target - m_radius) * 0.001f;
                    }
                }
                else
                {
                    // follower node

                    this.Position += 0.08f * (Target.Position - this.Position);
                }

                this.Shadow.Position = this.Position;
            }
                     );

            parent.AddChild(Shadow, -1);
            parent.AddChild(this, order);
        }