public override void render(float elapsedTime) { TgcModifiers modifiers = GuiController.Instance.Modifiers; Vector2 size = (Vector2)modifiers.getValue("size"); Vector3 position = (Vector3)modifiers.getValue("position"); Vector3 rotation = (Vector3)modifiers.getValue("rotation"); collider.Center = position; collider.Rotation = rotation; collider.Radius = size.X; collider.Length = size.Y; collider.updateValues(); if (TgcCollisionUtils.testSphereCylinder(collisionableSphere, collider)) { collisionableSphere.setRenderColor(collisionColor); } else { collisionableSphere.setRenderColor(noCollisionColor); } collider.render(); collisionableSphere.render(); }
public override void Render() { PreRender(); var size = (Vector2)Modifiers.getValue("size"); var position = (Vector3)Modifiers.getValue("position"); var rotation = (Vector3)Modifiers.getValue("rotation"); collider.Center = position; collider.Rotation = rotation; collider.Radius = size.X; collider.Length = size.Y; collider.updateValues(); if (TgcCollisionUtils.testSphereCylinder(collisionableSphere, collider)) { collisionableSphere.setRenderColor(collisionColor); } else { collisionableSphere.setRenderColor(noCollisionColor); } if (pickingTimeLeft > 0) { pickingTimeLeft -= ElapsedTime; } else { collider.setRenderColor(noCollisionColor); } if (TgcD3dInput.Instance.buttonPressed(TgcD3dInput.MouseButtons.BUTTON_LEFT)) { var pickingRay = new TgcPickingRay(); pickingRay.updateRay(); if (TgcCollisionUtils.testRayCylinder(pickingRay.Ray, collider)) { pickingTimeLeft = PICKING_TIME; collider.setRenderColor(pickingColor); } } collider.render(); collisionableSphere.render(); PostRender(); }
public override void render(float elapsedTime) { TgcModifiers modifiers = GuiController.Instance.Modifiers; Vector2 size = (Vector2)modifiers.getValue("size"); Vector3 position = (Vector3)modifiers.getValue("position"); Vector3 rotation = (Vector3)modifiers.getValue("rotation"); collider.Center = position; collider.Rotation = rotation; collider.Radius = size.X; collider.Length = size.Y; collider.updateValues(); if (TgcCollisionUtils.testSphereCylinder(collisionableSphere, collider)) { collisionableSphere.setRenderColor(collisionColor); } else { collisionableSphere.setRenderColor(noCollisionColor); } if (pickingTimeLeft > 0) { pickingTimeLeft -= elapsedTime; } else { collider.setRenderColor(noCollisionColor); } if (GuiController.Instance.D3dInput.buttonPressed(TgcViewer.Utils.Input.TgcD3dInput.MouseButtons.BUTTON_LEFT)) { TgcPickingRay pickingRay = new TgcPickingRay(); pickingRay.updateRay(); if (TgcCollisionUtils.testRayCylinder(pickingRay.Ray, collider)) { pickingTimeLeft = PICKING_TIME; collider.setRenderColor(pickingColor); } } collider.render(); collisionableSphere.render(); }
public ArtificialIntelligence(TGCVector3 posicionInicial, SoundsManager soundsManager) : base(posicionInicial, soundsManager) { this.CreateMesh(GlobalConcepts.GetInstance().GetMediaDir() + "meshCreator\\meshes\\Vehiculos\\Camioneta\\Camioneta-TgcScene.xml", posicionInicial); string reverseLightsPath, frontLightsPath, breakLightsPath; reverseLightsPath = GlobalConcepts.GetInstance().GetMediaDir() + "meshCreator\\meshes\\Vehiculos\\Camioneta\\LucesMarchaAtras\\Luces-TgcScene.xml"; frontLightsPath = GlobalConcepts.GetInstance().GetMediaDir() + "meshCreator\\meshes\\Vehiculos\\Camioneta\\LucesDelanteras\\Luces-TgcScene.xml"; breakLightsPath = GlobalConcepts.GetInstance().GetMediaDir() + "meshCreator\\meshes\\Vehiculos\\Camioneta\\LucesFrenado\\Luces-TgcScene.xml"; this.CreateLights(reverseLightsPath, breakLightsPath, frontLightsPath); this.CreateWheels(); radarSphere.setValues(this.GetPosition(), 75f); radarSphere.setRenderColor(Color.DarkViolet); this.aiState = new SearchWeapons(this); this.CreateSounds(soundsManager); this.velocidadMaximaDeAvance = 40f; velocidadRotacion = 2f; }
public Enemigo(Vector3 posicion) { //Cargar enemigo TgcSkeletalLoader skeletalLoader = new TgcSkeletalLoader(); meshEnemigos.Add("BasicHuman-TgcSkeletalMesh.xml"); meshEnemigos.Add("CombineSoldier-TgcSkeletalMesh.xml"); meshEnemigos.Add("CS_Gign-TgcSkeletalMesh.xml"); meshEnemigos.Add("CS_Arctic-TgcSkeletalMesh.xml"); meshEnemigos.Add("Pilot-TgcSkeletalMesh.xml"); meshEnemigos.Add("Quake2Scout-TgcSkeletalMesh.xml"); meshEnemigos.Add("WomanJeans-TgcSkeletalMesh.xml"); enemigo = skeletalLoader.loadMeshAndAnimationsFromFile( GuiController.Instance.ExamplesMediaDir + "SkeletalAnimations\\BasicHuman\\" + meshEnemigos[randomEnemigo.Next(0, 6)], new string[] { GuiController.Instance.ExamplesMediaDir + "SkeletalAnimations\\BasicHuman\\Animations\\" + "Walk-TgcSkeletalAnim.xml", GuiController.Instance.ExamplesMediaDir + "SkeletalAnimations\\BasicHuman\\Animations\\" + "StandBy-TgcSkeletalAnim.xml", GuiController.Instance.ExamplesMediaDir + "SkeletalAnimations\\BasicHuman\\Animations\\" + "Run-TgcSkeletalAnim.xml", GuiController.Instance.AlumnoEjemplosMediaDir + "CEGA\\Animations\\" + "Death-TgcSkeletalAnim.xml", }); enemigo.playAnimation("Run", true); enemigo.Position = posicion; enemigo.Scale = new Vector3(0.12f, 0.12f, 0.12f); this.colisionado = false; //Inicializo HP hp = 100; //Creo el BB para la cabeza cabeza = new TgcBoundingSphere(new Vector3(enemigo.Position.X, enemigo.Position.Y + 5.2F, enemigo.Position.Z), 0.5F); //Debe haber alguna forma de sacar esta info del hueso directamente cabeza.setRenderColor(System.Drawing.Color.Red); //Modifico el BB del cuerpo enemigo.AutoUpdateBoundingBox = false; enemigo.BoundingBox.scaleTranslate(enemigo.Position, new Vector3(0.07f, 0.095f, 0.07f)); //Inicializo el emisor emisorDeParticulas = new ParticleEmitter(GuiController.Instance.AlumnoEjemplosMediaDir + "CEGA\\Textures\\blood.jpg", 500); emisorDeParticulas.Playing = false; }
public void Init() { this.Posicion = new Vector3(0f, 0f, 0f); Inventario = new List <ObjetoInventario>(); var fruta = new ObjetoInventario { objeto = new Fruta(), cantidad = 0 }; Inventario.Add(fruta); var agua = new ObjetoInventario { objeto = new Agua(), cantidad = 0 }; Inventario.Add(agua); var madera = new ObjetoInventario { objeto = new Madera(), cantidad = 0 }; Inventario.Add(madera); var piedra = new ObjetoInventario { objeto = new Piedra(), cantidad = 0 }; Inventario.Add(piedra); // Creo la Espera que envuelve al personaje para detectar colisiones BoundingSphere = new TgcBoundingSphere(new Vector3(this.Posicion.X * env.terreno.SceneScaleXZ, env.terreno.CalcularAlturaTerreno(this.Posicion.X, this.Posicion.Z) * env.terreno.SceneScaleY + 10, this.Posicion.Z * env.terreno.SceneScaleXZ), 0.1f); BoundingSphere.setRenderColor(Color.Yellow); // Creo el Hacha del Personaje hachaPersonaje = loader.loadSceneFromFile(env.MediaDir + "hacha\\Hacha-TgcScene.xml").Meshes[0]; hachaPersonaje.Position = new Vector3(12 * env.terreno.SceneScaleXZ, env.terreno.CalcularAlturaTerreno(12, 22) * env.terreno.SceneScaleY, 22 * env.terreno.SceneScaleXZ); hachaPersonaje.AlphaBlendEnable = true; hachaPersonaje.Scale = new Vector3(0.05f, 0.05f, 0.05f); hachaPersonaje.rotateY(FastMath.PI_HALF); }
public override void Update() { var velocidadCaminar = 25f * 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; } //Si hubo desplazamiento if (moving) { //Aplicar movimiento colliderCylinder.Center += movement; colliderCylinderFixedY.Center += movement; personaje.Position += movement; //Activar animacion de caminando personaje.playAnimation("Caminando", true); } else { //Si no se esta moviendo, activar animacion de Parado personaje.playAnimation("Parado", true); } var size = sizeModifier.Value; var rotation = rotationModifier.Value; //Se tienen dos coliders, un cilindro con rotacion y otro orientado al eje Y. colliderCylinder.Rotation = rotation; colliderCylinder.Radius = size.X; colliderCylinder.Length = size.Y; //Actualizar este cilindro es mas costoso. colliderCylinder.updateValues(); //Cilindro sin rotacion, para ser utilizado con personajes. colliderCylinderFixedY.Radius = size.X; colliderCylinderFixedY.Length = size.Y; //Un cilindro orientado es facil de actualizar. colliderCylinderFixedY.updateValues(); if (fixedYModifier.Value) { //Test de colisiones del cilindro orientado en Y, al ser mucho mas simple tiene mas test soportados por el framework. if (TgcCollisionUtils.testSphereCylinder(collisionableSphere, colliderCylinderFixedY)) { collisionableSphere.setRenderColor(collisionColor); } else { collisionableSphere.setRenderColor(noCollisionColor); } if (TgcCollisionUtils.testAABBCylinder(collisionableMeshAABB.BoundingBox, colliderCylinderFixedY)) { collisionableMeshAABB.BoundingBox.setRenderColor(collisionColor); } else { collisionableMeshAABB.BoundingBox.setRenderColor(noCollisionColor); } if (TgcCollisionUtils.testCylinderCylinder(collisionableCylinder, colliderCylinderFixedY)) { collisionableCylinder.setRenderColor(collisionColor); } else { collisionableCylinder.setRenderColor(noCollisionColor); } if (pickingTimeLeft > 0) { pickingTimeLeft -= ElapsedTime; } else { colliderCylinderFixedY.setRenderColor(noCollisionColor); } if (Input.buttonPressed(TgcD3dInput.MouseButtons.BUTTON_LEFT)) { var pickingRay = new TgcPickingRay(Input); pickingRay.updateRay(); if (TgcCollisionUtils.testRayCylinder(pickingRay.Ray, colliderCylinderFixedY)) { pickingTimeLeft = PICKING_TIME; colliderCylinderFixedY.setRenderColor(pickingColor); } } } else { //Test de colisiones del cilindro, la cantidad de test que tiene el framewor es acotada. if (TgcCollisionUtils.testSphereCylinder(collisionableSphere, colliderCylinder)) { collisionableSphere.setRenderColor(collisionColor); } else { collisionableSphere.setRenderColor(noCollisionColor); } if (pickingTimeLeft > 0) { pickingTimeLeft -= ElapsedTime; } else { colliderCylinder.setRenderColor(noCollisionColor); } if (Input.buttonPressed(TgcD3dInput.MouseButtons.BUTTON_LEFT)) { var pickingRay = new TgcPickingRay(Input); pickingRay.updateRay(); if (TgcCollisionUtils.testRayCylinder(pickingRay.Ray, colliderCylinder)) { pickingTimeLeft = PICKING_TIME; colliderCylinder.setRenderColor(pickingColor); } } } //Hacer que la camara siga al personaje en su nueva posicion camaraInterna.Target = personaje.Position; }
public override void Update() { PreUpdate(); var velocidadCaminar = VELOCIDAD_DESPLAZAMIENTO * ElapsedTime; //Calcular proxima posicion de personaje segun Input var moving = false; var movement = new Vector3(0, 0, 0); //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.move(movement); } //Hacer que la camara siga al personaje en su nueva posicion camaraInterna.Target = mesh.Position; //Detectar colision con triangulo if (TgcCollisionUtils.testTriangleAABB(triangle[0].Position, triangle[1].Position, 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 override void Render() { PreRender(); var velocidadCaminar = 50f * ElapsedTime; //Calcular proxima posicion de personaje segun Input var d3dInput = TgcD3dInput.Instance; var moving = false; var movement = new Vector3(0, 0, 0); //Adelante if (d3dInput.keyDown(Key.W)) { movement.Z = velocidadCaminar; moving = true; } //Atras if (d3dInput.keyDown(Key.S)) { movement.Z = -velocidadCaminar; moving = true; } //Derecha if (d3dInput.keyDown(Key.D)) { movement.X = velocidadCaminar; moving = true; } //Izquierda if (d3dInput.keyDown(Key.A)) { movement.X = -velocidadCaminar; moving = true; } //Salto if (d3dInput.keyDown(Key.Space)) { movement.Y = velocidadCaminar; moving = true; } //Agachar if (d3dInput.keyDown(Key.LeftControl)) { movement.Y = -velocidadCaminar; moving = true; } //Si hubo desplazamiento if (moving) { //Aplicar movimiento box.move(movement); } //Hacer que la camara siga al personaje en su nueva posicion camaraInterna.Target = box.Position; //Detectar colision con triangulo if (TgcCollisionUtils.testTriangleAABB(triangle[0].Position, triangle[1].Position, triangle[2].Position, box.BoundingBox)) { box.BoundingBox.render(); triagleAABB.render(); } //Detectar colision con el otro AABB if (TgcCollisionUtils.testAABBAABB(box.BoundingBox, box2.BoundingBox)) { box.BoundingBox.render(); box2.BoundingBox.render(); } //Detectar colision con la esfera if (TgcCollisionUtils.testSphereAABB(sphere, box.BoundingBox)) { box.BoundingBox.render(); sphere.setRenderColor(Color.Red); } else { sphere.setRenderColor(Color.Yellow); } //Detectar colision con la obb if (TgcCollisionUtils.testObbAABB(obb, box.BoundingBox)) { box.BoundingBox.render(); obb.setRenderColor(Color.Red); } else { obb.setRenderColor(Color.Yellow); } //Dibujar box.render(); box2.render(); sphere.render(); obb.render(); //triangulo D3DDevice.Instance.Device.Transform.World = Matrix.Identity; D3DDevice.Instance.Device.VertexFormat = CustomVertex.PositionColored.Format; D3DDevice.Instance.Device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, triangle); PostRender(); }
public SphereCollider(TgcBoundingSphere sphere) { Sphere = sphere; _Radius = sphere.Radius; sphere.setRenderColor(DefaultColiderColor); }