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