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; }
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); }
public void ChangeMesh(IMesh newMesh) { deleteRenderElement(); renderElement = renderer.AddMesh(newMesh); }