public void moverPersonaje() { if (!flagGod) { var moveVector = new Vector3(0, 0, 0); var moving = false; if (!escondido) { if (Input.keyDown(Key.W)) { moving = true; moveVector += new Vector3(1, 0, 0) * velocidadPersonaje; } if (Input.keyDown(Key.D)) { moving = true; moveVector += new Vector3(0, 0, -1) * velocidadPersonaje; } if (Input.keyDown(Key.A)) { moving = true; moveVector += new Vector3(0, 0, 1) * velocidadPersonaje; } if (Input.keyDown(Key.S)) { moving = true; moveVector += new Vector3(-1, 0, 0) * velocidadPersonaje; } if (moving) { sound.play(false); } } //Vector de movimiento var movementVector = Vector3.Empty; var leftrightRotPrevius = leftrightRot - Input.XposRelative * RotationSpeed; var updownRotPrevius = updownRot + Input.YposRelative * RotationSpeed; leftrightRot -= Input.XposRelative * RotationSpeed; personaje.rotateY(Input.XposRelative * RotationSpeed); //maximos para los giros del vectorDeView updownRot += Input.YposRelative * RotationSpeed; cameraRotation = Matrix.RotationY(-leftrightRot) * Matrix.RotationX(-updownRot); //calcula la rotacion del vector de view movementVector = Vector3.TransformNormal(moveVector, Matrix.RotationY(-leftrightRot)); direccionLookAt = Vector3.TransformNormal(viewVector, cameraRotation); //direccion en que se mueve girada respecto la rotacion de la camara if (!escondido) { var realMovement = collisionManager.moveCharacter(boundPersonaje, movementVector * ElapsedTime, objetosColisionables); personaje.move(realMovement); lookAt = Vector3.Add(getOffset(), direccionLookAt); //vector lookAt final Camara.SetCamera(getOffset(), lookAt); } if (Input.keyPressed(Key.P)) { foreach (var puerta in puertas) { controlDePuerta(puerta); } } this.getColisionContraObjetoCarga(); } if (!flagGod) { luz.consumir(ElapsedTime); } }