public void ResetCamera(State state)
        {
            Camera.Position = Vector3.ZERO;
            Camera.Orientation = Quaternion.IDENTITY;

            CameraNode = new SimNode(state.SceneManager.RootSceneNode.CreateChildSceneNode());
            CameraChildNode = new SimNode(CameraNode.SceneNode, Camera);
        }
示例#2
0
        public PhysicsNode(SimNode simNode, State State)
            : base(simNode.SceneNode)
        {
            SceneNode = simNode.SceneNode;
            SceneNode child = SceneNode;
            while (child.NumChildren() > 0) child = child.GetChild(0) as SceneNode;

            var hull = new MogreNewt.CollisionPrimitives.ConvexHull(State.PhysicsWorld.World, child, child.Orientation, 0.002f, SceneNode.Name.GetHashCode());
            Body = new Body(State.PhysicsWorld.World, hull);
            Body.AttachNode(SceneNode);
            Body.IsGravityEnabled = true;

            Body.SetPositionOrientation(SceneNode._getDerivedPosition(), SceneNode.Orientation); // REALPosition Orient
            Body.ForceCallback += State.PhysicsWorld.ForceCallback;
            //            Body.AngularDamping = new Vector3(1,1,1);
            //            Body.LinearDamping = 1;
            Body.UserData = new PhysicsControlData();
            hull.Dispose();
        }
示例#3
0
        public override void CreateSimNode()
        {
            enabled = true;

            state.SceneManager.DestroyEntity("SubNode");
            state.SceneManager.DestroyLight("subLight");

            Entity sub = state.SceneManager.CreateEntity("SubNode", @"MockSub.mesh");
            var sceneNode = new SceneNode(state.SceneManager);
            sceneNode.AttachObject(sub);
            sceneNode.Yaw(Math.HALF_PI);
            SimNode = new SimNode(state.SceneManager.RootSceneNode, sceneNode);

            Light subLight = state.SceneManager.CreateLight("subLight");
            subLight.Type = Light.LightTypes.LT_SPOTLIGHT;
            subLight.Direction = new Vector3(0, 0, -1);
            subLight.SpotlightOuterAngle = new Radian(0.4F);
            subLight.SpotlightInnerAngle = new Radian(0.2F);
            subLight.SpotlightFalloff = 100.0F;
            subLight.SetAttenuation(100, 0F, 0.0F, 0.01F);
            SimNode.SceneNode.AttachObject(subLight);
            SimNode.SceneNode.Position = new Vector3(0, 0, 20);
        }
示例#4
0
        public void Init(State State)
        {
            this.State = State;
            State.PhysicsWorld = this;
            World = new MogreNewt.World();
            World.SetPlatformArchitecture(MogreNewt.World.PlatformArchitecture.PA_BEST_HARDWARE);
            World.SetWorldSize(new Vector3(-500, -500, -500), new Vector3(500, 500, 500));
            World.SetSolverModel(MogreNewt.World.SolverModelMode.SM_2_PASS);
            World.DebuggerInstance.Init(State.SceneManager);

            // using the new "SceneParser" TreeCollision primitive.  this will automatically parse an entire tree of
            // SceneNodes (parsing all children), and add collision for all meshes in the tree.
            var statCol = new MogreNewt.CollisionPrimitives.TreeCollisionSceneParser(World);
            statCol.ParseScene(State.SceneManager.RootSceneNode, true, 0); // was floornode
            var sceneBody = new Body(World, statCol);
            statCol.Dispose();

            sceneBody.AttachNode(State.SceneManager.RootSceneNode); // was floornode
            sceneBody.SetPositionOrientation(new Vector3(0.0f, 0.0f, 0.0f), Quaternion.IDENTITY);

            var ent = State.SceneManager.CreateEntity("cylinder_body", "mocksub.mesh");
            var simNode = new SimNode(State.SceneManager.RootSceneNode, ent);

            // rigid body.
            var phyNode = new PhysicsNode(simNode, State);

            phyNode.Body.SetPositionOrientation(new Vector3(0, 10, 0), Quaternion.IDENTITY);
            phyNode.Body.SetMassMatrix(125, Vector3.ZERO);

            var physicsNode = new PhysicsNode(State.SubNode, State);
            physicsNode.Body.SetMassMatrix(125, Vector3.ZERO);
            // TODO: FIX THIS State.SubNode = physicsNode;

            // initial position
            State.Root.FrameStarted += NewtonUpdate;
        }
示例#5
0
 public void AddChild(SimNode node)
 {
     AddChild(node.SceneNode);
 }
示例#6
0
 public void RemoveChild(SimNode node)
 {
     RemoveChild(node.SceneNode);
 }
示例#7
0
 public void RemoveChild(SimNode node)
 {
     RemoveChild(node.SceneNode);
 }
示例#8
0
 public void AddChild(SimNode node)
 {
     AddChild(node.SceneNode);
 }
示例#9
0
        private void RecreateSceneNode()
        {
            if (SimNode != null)
            {
                state.SceneManager.RootSceneNode.RemoveChild(base.SimNode.SceneNode);
                SimNode.SceneNode.RemoveAndDestroyAllChildren();
            }

            mesh = string.IsNullOrEmpty(mesh) ? @"pathsegment.mesh" : new FileInfo(mesh).Name;
            var sceneEntity = state.SceneManager.CreateEntity(Name + Random.Next(), mesh);
            var sceneNode = state.SceneManager.RootSceneNode.CreateChildSceneNode();
            sceneNode.AttachObject(sceneEntity);

            sceneNode.Position = Position;
            sceneNode.Orientation = Orientation;
            sceneNode.Scale(Scale, Scale, Scale);

            SimNode = new SimNode(sceneNode);
        }
示例#10
0
 public BaseEntity(SimNode node)
 {
     this.SimNode = node;
 }
示例#11
0
        public override void CreateSimNode()
        {
            enabled = true;

            new SimHydrax().Init(state);
            SimNode = new SimNode(state.SceneManager.RootSceneNode);
        }