public WorldObject(IXNAGame game, WorldObjectType objectType, SimpleMeshRenderer renderer)
 {
     this.game     = game;
     ObjectType    = objectType;
     Renderer      = renderer;
     renderElement = Renderer.AddMesh(ObjectType.Mesh);
     updateWorldMatrix();
 }
 private void deleteGhost()
 {
     if (ghost == null)
     {
         return;
     }
     ghost.WorldMatrix = new Matrix();
     ghost             = null;
 }
示例#3
0
 private void deleteRenderElement()
 {
     if (renderElement == null)
     {
         return;
     }
     renderElement.WorldMatrix = new Matrix();
     renderElement             = null;
 }
        private void processStates()
        {
            if (!isObjectSelected())
            {
                deleteGhost();
                disableGizmos();
                trySelect();
            }
            else if (isObjectSelected() && !gizmoActive())
            {
                if (ghost != null)
                {
                    Vector3    scale, translation;
                    Quaternion rotation;
                    ghost.WorldMatrix.Decompose(out scale, out rotation, out translation);
                    selectedWorldObject.Position = translation;
                    selectedWorldObject.Rotation = rotation;
                }

                deleteGhost();
                if (trySelect())
                {
                    return;
                }
                if (!isObjectSelected())
                {
                    return;
                }
                updateGizmoPosition();
                updateGizmoType();
            }
            else if (isObjectSelected() && gizmoActive())
            {
                updateSelectedObjectPosition();

                if (ghost == null)
                {
                    ghost = renderer.AddMesh(selectedWorldObject.ObjectType.Mesh);
                }

                updateGhostPosition();
            }
            else
            {
                throw new InvalidOperationException("Invalid state!");
            }
        }
        public void TestMeshRendererSimple()
        {
            var mesh = DefaultMeshes.CreateSimpleTestMesh();

            var texturePool           = new TexturePool();
            var meshpartPool          = new MeshPartPool();
            var vertexDeclarationPool = new VertexDeclarationPool();

            var renderer = new SimpleMeshRenderer(texturePool, meshpartPool, vertexDeclarationPool);

            vertexDeclarationPool.SetVertexElements <TangentVertex>(TangentVertex.VertexElements);

            SimpleMeshRenderElement middle = null;

            for (int i = 0; i < 50; i++)
            {
                for (int j = 0; j < 50; j++)
                {
                    var el = renderer.AddMesh(mesh);
                    el.WorldMatrix = Matrix.CreateTranslation(Vector3.Right * i * 2 + Vector3.UnitZ * j * 2);

                    if (i > 20 && i < 30 && j > 20 && j < 30)
                    {
                        el.Delete();
                    }
                }
            }


            var game = new XNAGame();

            game.DrawFps = true;

            game.AddXNAObject(texturePool);
            game.AddXNAObject(meshpartPool);
            game.AddXNAObject(vertexDeclarationPool);
            game.AddXNAObject(renderer);

            game.Run();
        }
 public TestGameMesh(SimpleMeshRenderElement renderElement, MeshDynamicPhysicsElement physicsElement)
 {
     RenderElement  = renderElement;
     PhysicsElement = physicsElement;
 }
        public void Update(IXNAGame _game)
        {
            if (!Enabled)
            {
                return;
            }

            if (!_game.Mouse.CursorEnabled)
            {
                return;
            }

            WorldObject target = RaycastWorldTile(_game);

            if (target == null)
            {
                return;
            }

            TileFace resultFace = RaycastTileFace(_game, target);

            if (PickOperandAState)
            {
                if (_game.Mouse.LeftMouseJustPressed)
                {
                    tileA     = target;
                    tileFaceA = resultFace;


                    ghost = renderer.AddMesh(tileA.ObjectType.Mesh);


                    PickOperandAState = false;
                    PickOperandBState = true;
                }
            }

            if (PickOperandBState)
            {
                if (tileA.Equals(target))
                {
                    return;
                }

                tileB     = target;
                tileFaceB = resultFace;

                PointA = builder.GetPoint(tileA.ObjectType.TileData, tileFaceA, null
                                          , tileA.ObjectType.TileData.GetTotalWinding(tileFaceA) ^ winding);
                PointB = builder.GetPoint(tileB.ObjectType.TileData, tileFaceB, null
                                          , tileB.ObjectType.TileData.GetTotalWinding(tileFaceB));


                List <Transformation> transformations = new List <Transformation>();

                snapper.SnapAToB(PointA, PointB, tileB.Transformation, transformations);

                if (transformations.Count != 0)
                {
                    ghost.WorldMatrix = transformations[0].CreateMatrix();
                }

                if (_game.Mouse.RightMouseJustPressed)
                {
                    winding = !winding;
                }
                if (_game.Mouse.LeftMouseJustPressed)
                {
                    PickOperandBState = false;
                    SnapLearnState    = true;
                }
            }

            if (SnapLearnState)
            {
                learnSnap();


                SnapLearnState    = false;
                PickOperandAState = true;

                ghost.WorldMatrix     = new Matrix();
                ghostFace.WorldMatrix = new Matrix();

                Enabled = false; // TODO: If you are going to decide how to use this class in this class,
                                 //      then you should put your entire program here too.
                return;
            }

            SetGhostFaceAtFace(target, resultFace);
        }
示例#8
0
 public void ChangeMesh(IMesh newMesh)
 {
     deleteRenderElement();
     renderElement = renderer.AddMesh(newMesh);
 }