Esempio n. 1
0
 public FreeLandDefaultViewpointMechanism(ISceneNode node, FreeControlledCamera.Props props, IKeyboardInputProvider keyboardInputProvider)
 {
     this.props = props;
     this.keyboardInputProvider = keyboardInputProvider;
     this.node   = node;
     FixedCamera = CreateControlledViewpoint();
 }
Esempio n. 2
0
        private void ArrangeAndDecorateInternal(IStoryGraph sg, int nodeIndex, int scaleLevel)
        {
            var aStory           = sg.Aspects[nodeIndex];
            var node             = sg.NodeObjects[nodeIndex];
            var abstractChildren = sg.Children[nodeIndex];
            var numChildren      = abstractChildren.Count;

            var scale = MathHelper.Pow(4, scaleLevel);

            var visuals = new []
            {
                ModelVisualElement.New()
                .SetModel(planeModel)
                .SetMaterial(planeMaterials[scaleLevel % planeMaterials.Length])
                .SetTransform(Transform.Scaling(10 * scale))
            };

            var viewpointProps = new FreeControlledCamera.Props
            {
                Eye         = Vector3.UnitZ * 10f * scale,
                Yaw         = MathHelper.PiOver4,
                Pitch       = MathHelper.PiOver4,
                FieldOfView = MathHelper.PiOver4,
                ZNear       = 0.1f * scale,
                ZFar        = 100.0f * scale
            };

            for (var i = 0; i < numChildren; i++)
            {
                var adaptiveChild = abstractChildren[i];
                var angle         = MathHelper.TwoPi * i / numChildren - MathHelper.PiOver4;
                var rotation      = Quaternion.RotationZ(angle);
                var radius        = scale * GetBestRadius(numChildren);

                var offset = new Vector3(radius * MathHelper.Sin(angle), radius * MathHelper.Cos(angle), 0.1f * scale);
                sg.NodeObjects[adaptiveChild].Transform = new Transform(1, rotation, offset);
                ArrangeAndDecorateInternal(sg, adaptiveChild, scaleLevel - 1);
            }

            aStory.SetDynamicParts(new StoryNodeDynamicParts
            {
                DefaultViewpointMechanism = new FreeLandDefaultViewpointMechanism(node, viewpointProps, keyboardInputProvider),
                Hittable       = GetHittableComponent(node),
                VisualElements = visuals
            });
        }