internal void HuirDe(Personaje personaje, float elapsedTime) { var posicionDeBorrado = new TGCVector3(ghost.Position.X + 2000, ghost.Position.Y, ghost.Position.Z - 5000); ghost.Move(posicionDeBorrado); ghost.updateBoundingBox(); ghost.UpdateMeshTransform(); }
private void eliminarMesh() { TGCVector3 posicionDeBorrado = new TGCVector3(0, -4000, 0); mesh.Move(posicionDeBorrado); mesh.updateBoundingBox(); mesh.UpdateMeshTransform(); }
private void eliminarMesh() { TGCVector3 posicionDeBorrado = new TGCVector3(0, -4000, 0); mesh.Move(posicionDeBorrado); mesh.updateBoundingBox(); mesh.UpdateMeshTransform(); //no hago el dispose aca porque sino lo tendria que sacar del TGCScene y no se si quiero hacer eso }
public override void Init() { var loader = new TgcSceneLoader(); var scene = loader.loadSceneFromFile(MediaDir + "MeshCreator\\Meshes\\Vehiculos\\Patrullero\\Patrullero-TgcScene.xml"); mesh = scene.Meshes[0]; mesh.Scale = new Vector3(0.25f, 0.25f, 0.25f); //Cuerpo principal que se controla con el teclado //mesh = TgcBox.fromSize(new Vector3(0, 10, 0), new Vector3(10, 10, 10), Color.Blue).toMesh("box"); //triangulo triangle = new CustomVertex.PositionColored[3]; triangle[0] = new CustomVertex.PositionColored(-100, 0, 0, Color.Green.ToArgb()); triangle[1] = new CustomVertex.PositionColored(0, 0, 50, Color.Green.ToArgb()); triangle[2] = new CustomVertex.PositionColored(0, 100, 0, Color.Green.ToArgb()); triagleAABB = TgcBoundingAxisAlignBox.computeFromPoints(new[] { triangle[0].Position, triangle[1].Position, triangle[2].Position }); //box2 box2 = TgcBox.fromSize(new Vector3(-50, 10, -20), new Vector3(15, 15, 15), Color.Violet); //sphere boundingSphere = new TgcBoundingSphere(new Vector3(30, 20, -20), 15); //OBB: computar OBB a partir del AABB del mesh. meshObb = loader.loadSceneFromFile(MediaDir + "MeshCreator\\Meshes\\Objetos\\Catapulta\\Catapulta-TgcScene.xml") .Meshes[0]; meshObb.Scale = new Vector3(0.1f, 0.1f, 0.1f); meshObb.Position = new Vector3(100, 0, 30); meshObb.updateBoundingBox(); //Computar OBB a partir del AABB del mesh. Inicialmente genera el mismo volumen que el AABB, pero luego te permite rotarlo (cosa que el AABB no puede) obb = TgcBoundingOrientedBox.computeFromAABB(meshObb.BoundingBox); //Otra alternativa es computar OBB a partir de sus vertices. Esto genera un OBB lo mas apretado posible pero es una operacion costosa //obb = TgcBoundingOrientedBox.computeFromPoints(mesh.getVertexPositions()); //Rotar mesh y rotar OBB. A diferencia del AABB, nosotros tenemos que mantener el OBB actualizado segun cada movimiento del mesh meshObb.Rotation = new Vector3(0, FastMath.PI / 4, 0); //Los obb tienen una especie de autotransform aun. obb.rotate(new Vector3(0, FastMath.PI / 4, 0)); //Configurar camara en Tercer Persona camaraInterna = new TgcThirdPersonCamera(mesh.Position, 30, -75); Camara = camaraInterna; }
public void MoverPersonaje(char key, float elapsedTime, TgcD3dInput input, Escenario escenario, Monster monster) { MovementSpeed = 800.0f; var movimiento = TGCVector3.Empty; var posicionOriginal = this.Position; var moving = false; var estoyFlotando = false; if (key == key_forward) { movimiento.Z = -1; moving = true; } if (key == key_left) { movimiento.X = 1; moving = true; } if (key == key_back) { movimiento.Z = 1; moving = true; } if (key == key_right) { movimiento.X = -1; moving = true; } if (key == ' ') { movimiento.Y = 1; moving = true; } if (moving) { this.posicionAnterior = this.Position; var lastPos = meshPersonaje.Position; movimiento *= MovementSpeed * elapsedTime; meshPersonaje.Position = meshPersonaje.Position + movimiento; meshPersonaje.updateBoundingBox(); //COLISIONES bool chocaron = escenario.tgcScene.Meshes.Any(mesh => TgcCollisionUtils.testAABBAABB(mesh.BoundingBox, meshPersonaje.BoundingBox)); if (chocaron) { meshPersonaje.Position = lastPos; } bool chocoConMonster = TgcCollisionUtils.testAABBAABB(monster.ghost.BoundingBox, meshPersonaje.BoundingBox); if (chocoConMonster) { meshPersonaje.Position = lastPos; } meshPersonaje.Transform = TGCMatrix.Scaling(meshPersonaje.Scale) * TGCMatrix.RotationYawPitchRoll(meshPersonaje.Rotation.Y, meshPersonaje.Rotation.X, meshPersonaje.Rotation.Z) * TGCMatrix.Translation(meshPersonaje.Position); this.Position = meshPersonaje.Position; //Hacer que la camara siga al personaje en su nueva posicion //camaraInterna.Target = this.Position; } float rotY = input.XposRelative * rotationSpeed; float rotX = input.YposRelative * rotationSpeed; eye = this.Position; target += movimiento; if (lockMouse) { if (rotY != 0.0f || rotX != 0.0f) { look(rotX, rotY); } Cursor.Position = windowCenter; } this.SetCamera(eye, target); }
public override void Update() { var velocidadCaminar = VELOCIDAD_DESPLAZAMIENTO * ElapsedTime; //Calcular proxima posicion de personaje segun Input var moving = false; var movement = TGCVector3.Empty; //Adelante if (Input.keyDown(Key.W)) { movement.Z = velocidadCaminar; moving = true; } //Atras if (Input.keyDown(Key.S)) { movement.Z = -velocidadCaminar; moving = true; } //Derecha if (Input.keyDown(Key.D)) { movement.X = velocidadCaminar; moving = true; } //Izquierda if (Input.keyDown(Key.A)) { movement.X = -velocidadCaminar; moving = true; } //Salto if (Input.keyDown(Key.Space)) { movement.Y = velocidadCaminar; moving = true; } //Agachar if (Input.keyDown(Key.LeftControl)) { movement.Y = -velocidadCaminar; moving = true; } //Si hubo desplazamiento if (moving) { //Aplicar movimiento, internamente suma valores a la posicion actual del mesh. mesh.Position = mesh.Position + movement; mesh.Transform = TGCMatrix.Translation(mesh.Position); mesh.updateBoundingBox(); } //Hacer que la camara siga al personaje en su nueva posicion camaraInterna.Target = mesh.Position; //Detectar colision con triangulo if (TgcCollisionUtils.testTriangleAABB(new TGCVector3(triangle[0].Position), new TGCVector3(triangle[1].Position), new TGCVector3(triangle[2].Position), mesh.BoundingBox)) { triangle[0].Color = Color.Red.ToArgb(); triangle[1].Color = Color.Red.ToArgb(); triangle[2].Color = Color.Red.ToArgb(); } else { triangle[0].Color = Color.Green.ToArgb(); triangle[1].Color = Color.Green.ToArgb(); triangle[2].Color = Color.Green.ToArgb(); } //Detectar colision con el otro AABB if (TgcCollisionUtils.testAABBAABB(mesh.BoundingBox, box2.BoundingBox)) { box2.Color = Color.Red; box2.updateValues(); } else { box2.Color = Color.Violet; box2.updateValues(); } //Detectar colision con la esfera if (TgcCollisionUtils.testSphereAABB(boundingSphere, mesh.BoundingBox)) { boundingSphere.setRenderColor(Color.Red); } else { boundingSphere.setRenderColor(Color.Yellow); } //Detectar colision con la obb if (TgcCollisionUtils.testObbAABB(obb, mesh.BoundingBox)) { obb.setRenderColor(Color.Red); } else { obb.setRenderColor(Color.Yellow); } }
public void MoverPersonaje(char key, float elapsedTime, TgcD3dInput input, GameModel gameModel) { MovementSpeed = 800.0f; var movimiento = TGCVector3.Empty; var posicionOriginal = this.Position; var moving = false; var estoyFlotando = false; var adelante = false; var lateral = false; float rotY1 = input.XposRelative * 5 * elapsedTime; float rotX1 = input.YposRelative * 5 * elapsedTime; anguloAbsolutoEnY -= rotY1; anguloAbsolutoEnX += rotX1; if (key == key_forward) { movimiento.Z = -1; moving = true; adelante = true; } if (key == key_left) { movimiento.X = 1; moving = true; lateral = true; } if (key == key_back) { movimiento.Z = 1; moving = true; adelante = true; } if (key == key_right) { movimiento.X = -1; moving = true; lateral = true; } if (moving) { this.posicionAnterior = this.Position; var lastPos = meshPersonaje.Position; //movimiento *= MovementSpeed * elapsedTime; //meshPersonaje.Position = meshPersonaje.Position + movimiento; float MovimientoDelPersonaje = 0; if (adelante) { MovimientoDelPersonaje = (-1) * movimiento.Z * MovementSpeed; avanzarYretroceder(elapsedTime, MovimientoDelPersonaje, anguloAbsolutoEnY); } if (lateral) { MovimientoDelPersonaje = -1 * movimiento.X * MovementSpeed; DesplazamientoLateral(elapsedTime, MovimientoDelPersonaje, anguloAbsolutoEnY); } //RecalcularForward(); //en este metodo hay que poner bien forward y se soluciona el shader meshPersonaje.updateBoundingBox(); //COLISIONES bool chocaron = gameModel.escenario.tgcScene.Meshes.Any(mesh => TgcCollisionUtils.testAABBAABB(mesh.BoundingBox, meshPersonaje.BoundingBox)); if (chocaron) { meshPersonaje.Position = lastPos; var escalera = gameModel.escenario.tgcScene.Meshes.Find(mesh => mesh.Name.Contains("Escalera")); this.chocandoConEscalera = TgcCollisionUtils.testAABBAABB(escalera.BoundingBox, meshPersonaje.BoundingBox); } bool chocoConMonster = TgcCollisionUtils.testAABBAABB(gameModel.monster.ghost.BoundingBox, meshPersonaje.BoundingBox); if (chocoConMonster) { meshPersonaje.Position = lastPos; } if (!chocoConMonster && !chocaron) { vectorDeMovemiento = movimiento; } bool chocoConParedInvisible = TgcCollisionUtils.testAABBAABB(gameModel.paredInvisible.paredInvisible.BoundingBox, meshPersonaje.BoundingBox); if (chocoConParedInvisible) { meshPersonaje.Position = lastPos; } reproducirCaminata(); transformarMesh(); // Hace el mesh transform this.Position = meshPersonaje.Position; } //en este metodo hay que poner bien forward y se soluciona el shader eye = this.Position; target = puntoDemira(anguloAbsolutoEnY, anguloAbsolutoEnX);//movimiento; RecalcularForward(); //Hacer que la camara siga al personaje en su nueva posicion //camaraInterna.Target = this.Position; this.SetCamera(eye, target); }