protected override async void Start() { base.Start(); Input.SubscribeToKeyDown(k => { if (k.Key == Key.Esc) Exit(); }); Input.SubscribeToTouchEnd(OnTouched); // 3D scene with Octree var scene = new Scene(Context); octree = scene.CreateComponent<Octree>(); // Camera var cameraNode = scene.CreateChild(name: "camera"); cameraNode.Position = new Vector3(10, 14, 10); cameraNode.Rotation = new Quaternion(-0.121f, 0.878f, -0.305f, -0.35f); camera = cameraNode.CreateComponent<Camera>(); // Light Node lightNode = cameraNode.CreateChild(name: "light"); var light = lightNode.CreateComponent<Light>(); light.LightType = LightType.Point; light.Range = 100; light.Brightness = 1.3f; // Viewport var viewport = new Viewport(Context, scene, camera, null); Renderer.SetViewport(0, viewport); viewport.SetClearColor(new Color(0.4f, 0.4f, 0.4f)); plotNode = scene.CreateChild(); var baseNode = plotNode.CreateChild().CreateChild(); var plane = baseNode.CreateComponent<StaticModel>(); plane.Model = ResourceCache.GetModel("Models/Plane.mdl"); int size = 5; baseNode.Scale = new Vector3(size * 1.5f, 1, size * 1.5f); for (var i = 0f; i < size * 1.5f; i += 1.5f) { for (var j = 0f; j < size * 1.5f; j += 1.5f) { var boxNode = plotNode.CreateChild(); boxNode.Position = new Vector3(size / 2f - i + 0.5f, 0, size / 2f - j + 0.5f); var box = new Bar(h => Math.Round(h, 1).ToString(), new Color(Sample.NextRandom(), Sample.NextRandom(), Sample.NextRandom(), 0.9f)); boxNode.AddComponent(box); box.Value = (Math.Abs(i) + Math.Abs(j) + 1) / 2f; } } await plotNode.RunActionsAsync(new EaseBackOut(new RotateBy(2f, 0, 360, 0))); movementsEnabled = true; }
private void OnTouched(TouchEndEventArgs e) { Ray cameraRay = camera.GetScreenRay((float)e.X / Graphics.Width, (float)e.Y / Graphics.Height); var results = octree.RaycastSingle(cameraRay, RayQueryLevel.Triangle, 100, DrawableFlags.Geometry); if (results != null && results.Any()) { var bar = results[0].Node?.Parent?.GetComponent<Bar>(); if (selectedBar != bar) { selectedBar?.Deselect(); selectedBar = bar; selectedBar?.Select(); } } }