void CreateScene() { Input.SubscribeToTouchEnd(OnTouched); var cache = ResourceCache; scene = new Scene(); octree = scene.CreateComponent <Octree>(); plotNode = scene.CreateChild(); var cameraNode = scene.CreateChild("camera"); camera = cameraNode.CreateComponent <Camera>(); cameraNode.Position = new Vector3(20, 30, 20) / 1.75f; cameraNode.Rotation = new Quaternion(-0.121f, 0.878f, -0.305f, -0.35f); plotNode.Rotate(new Quaternion(2f, -90, 0), 0); Node lightNode = cameraNode.CreateChild(name: "light"); var light = lightNode.CreateComponent <Light>(); light.LightType = LightType.Point; light.Range = 100; light.Brightness = 0.7f; int size = 3; int values = 4; float maxY = 10; for (int i = 0; i < values; i++) { var sectionX = plotNode.CreateChild().CreateChild(); var planeX = sectionX.CreateComponent <StaticModel>(); planeX.Model = ResourceCache.GetModel("Models/Box.mdl"); sectionX.Position = new Vector3(size * size * (-1) + size - 0.8f, (maxY / values) * i + (maxY / values / 2), 0); sectionX.Scale = new Vector3(maxY / values, 0.2f, 8); sectionX.Rotate(new Quaternion(0, 0, -90), 0); planeX.SetMaterial(cache.GetMaterial("Materials/Wall.xml").Clone("")); } var deltaColor = new Color(RandomHelper.NextRandom(), RandomHelper.NextRandom(), RandomHelper.NextRandom(), 1); deltas = new List <DeltaBox>(); bars = new List <Bar>(size * size); cylinders = new List <Cylinder>(size * size); barValues = new List <float>(); for (int i = 0; i < 9; i++) { float barValue = RandomHelper.NextRandom(1.0f, 5.0f); barValues.Add(barValue); var boxNode = plotNode.CreateChild(); boxNode.Position = new Vector3(size / 2f - i * 1.5f + size * size * 0.5f, 0, size / 4f); boxNode.Rotate(new Quaternion(0, 180, 0), 0); var box = new Bar(new Color(RandomHelper.NextRandom(), RandomHelper.NextRandom(), RandomHelper.NextRandom(), 0.5f)); boxNode.AddComponent(box); box.SetValueWithAnimation(barValue); bars.Add(box); var sectionY = plotNode.CreateChild().CreateChild(); var planeY = sectionY.CreateComponent <StaticModel>(); planeY.Model = ResourceCache.GetModel("Models/Box.mdl"); planeY.SetMaterial(cache.GetMaterial("Materials/Wall.xml").Clone("")); sectionY.Position = new Vector3(boxNode.Position.X, 0, 0); sectionY.Scale = new Vector3(boxNode.Scale.X + 0.5f, 0.2f, 8); for (int j = 0; j < values; j++) { var sectionZ = plotNode.CreateChild().CreateChild(); var planeZ = sectionZ.CreateComponent <StaticModel>(); planeZ.Model = ResourceCache.GetModel("Models/Box.mdl"); sectionZ.Position = new Vector3(boxNode.Position.X, (maxY / values) * j + (maxY / values) / 2, sectionY.Scale.Z / 2 + 0.1f); sectionZ.Scale = new Vector3(sectionY.Scale.X, maxY / values, 0.2f); planeZ.SetMaterial(cache.GetMaterial("Materials/Wall.xml").Clone("")); } if (i != 0) { var valueNode = plotNode.CreateChild(); valueNode.Position = new Vector3(boxNode.Position.X + boxNode.Scale.X, 0, size); valueNode.Scale = new Vector3(1.5f, 1, 1); valueNode.Rotate(new Quaternion(0, 180, 0), 0); var valueBox = new DeltaBar(deltaColor); valueNode.AddComponent(valueBox); var deltaNode = plotNode.CreateChild(); var deltaBox = new DeltaBox(deltaColor); if (i == 1) { deltaBox.SetValues(barValues[i], barValues[i - 1]); } else { deltaBox.SetValues(barValues[i], deltas[i - 2].leftValue); } DeltaHelper.AdjustDelta(deltaNode, deltaBox, valueBox); deltaBox.bar = valueBox; deltas.Add(deltaBox); } var cylinderNode = plotNode.CreateChild(); cylinderNode.Position = new Vector3(size / 2f - i * 1.5f + size * size * 0.5f, 0, size / 4f - 2); cylinderNode.Rotate(new Quaternion(0, 180, 0), 0); var cylinder = new Cylinder(new Color(RandomHelper.NextRandom(), RandomHelper.NextRandom(), RandomHelper.NextRandom(), 0.5f)); cylinderNode.AddComponent(cylinder); cylinder.SetValueWithAnimation(barValue); cylinders.Add(cylinder); bars[bars.Count - 1].Cylinder = cylinder; } for (int i = 0; i < 9; i++) { if (i > 0 && i < 8) { bars [i].SetDeltas(deltas [i], deltas [i - 1]); } if (i == 0) { bars [i].SetDeltas(deltas [i], null); } if (i == 8) { bars [i].SetDeltas(null, deltas [i - 1]); } } SelectedBar = bars.First(); SelectedBar.Select(); movementsEnabled = true; }