//Verificar Coliciones de FireCube Con Enemigos public void Colision_Enemigo_FC(Matus Enemigo) { Circulo Aux = new Circulo((int)Enemigo.posicion.X, (int)Enemigo.posicion.Z,(int)Radio_M); for (int i = 0; i < Circulos_B_FC.Count() && Enemigo.isAlive; i++) if (Aux.Intercepta(Circulos_B_FC.ElementAt(i))) Enemigo.setOnFire(); }
public void Actualizar_Circulos_M(int index, Vector2 Pos) { CM[index] = new Circulo((int)Pos.X,(int)Pos.Y,(int)Radio_M); }
// Cargar Posiciones y Circulos de Los Enemigos public void Agregar_Circulos_M(Vector2[] Pos) { CM = new Circulo[Pos.Length]; for(int i=0; i<Pos.Length ;i++) { CM[i] = new Circulo((int)Pos[i].X, (int)Pos[i].Y,(int)Radio_M); } }
public char Dir_Enem(Personaje M1, Matus M2) { Circulo Cj1 = new Circulo((int)M1.posicion.X, (int)M1.posicion.Z, (int)Radio_M); Circulo Cj2 = new Circulo((int)M2.posicion.X, (int)M2.posicion.Z, (int)Radio_M); return Geom.indicarDireccion(Cj1.BoundingRect(), Cj2.BoundingRect()); }
// Por Doi¿nde Choca public char Donde_Choca() { Circulo Cj = new Circulo((int)Posicion_J.X, (int)Posicion_J.Y, (int)Radio_J); return Geom.indicarDireccion(CE[Edificion_En_Colicion], Cj.BoundingRect()); }
public bool Colision_Pj_En() { Circulo Cj = new Circulo((int)Posicion_J.X, (int)Posicion_J.Y, (int)Radio_J); bool Intercep = false; for (int i = 0; i < CM.Length && !Intercep; i++) { if (Cj.Intercepta(CM[i])) { Intercep = true; Enemigo_En_Colision = i; } } return Intercep; }
//Enemigos entre si public bool Colision_Pr_Ma(Personaje PerS, Matus Ene2) { Circulo Cm1 = new Circulo((int)PerS.posicion.X, (int)PerS.posicion.Z, (int)Radio_M); Circulo Cm2 = new Circulo((int)Ene2.posicion.X, (int)Ene2.posicion.Z, (int)Radio_M); return Cm1.Intercepta(Cm2); }
public bool Colision_Ma_Ed(Matus Enemigo) { Circulo Cm = new Circulo((int)Enemigo.posicion.X, (int)Enemigo.posicion.Z, (int)Radio_M); bool Intercep = false; for (int i = 0; i < CE.Length && !Intercep; i++) { if (Cm.Intercepta(CE[i])) { Intercep = true; Edificion_En_Colicion = i; } } return Intercep; }
//Verificar Colisiones de Proyectil con Enemigo public void Colision_Enemigo_PY(Matus Enemigo, Disparo Proyectil) { Circulo Aux = new Circulo((int)Enemigo.posicion.X, (int)Enemigo.posicion.Z, (int)Radio_M); Circulo Aux2 = new Circulo((int)Proyectil.Posicion.X, (int)Proyectil.Posicion.Z, (int)Radio_B_FC); if (Enemigo.isAlive && Aux.Intercepta(Aux2)) if (Proyectil.Tipo)//IceCube { Enemigo.setFrozen(); Proyectil.ready = true; } else { Enemigo.setOnFire(); Proyectil.ready = true; } }
//Paso 9: Contencion (Circulos) /// <summary> /// Determina cuando este Circulo contiene completamente a otro. /// </summary> /// <param name="circuloB">El Circulo que debe estar contenido.</param> /// <returns>Un bool indicando si este Circulo contiene al CirculoB o no</returns> public bool Contiene(Circulo circuloB) { return Distancia(circuloB) + circuloB.Radio <= Radio; }
//Paso 4.2: Interceptar Circulos. /// <summary> /// Determina cuando este Circulo Intersepta o Contiene a otro. /// </summary> /// <param name="circuloB">El otro circulo a comparar</param> /// <returns>Un bool indicando si hay Intereseccion o no</returns> public bool Intercepta(Circulo circuloB) { return Distancia(circuloB) <= Radio + circuloB.Radio; }
//Paso 4: Interceptar Circulos (Distancia entre Centros). /// <summary> /// Determina la distancia entre este el centro de este circulo y otro. /// </summary> /// <param name="circuloB">El otro circulo a comparar.</param> /// <returns>Un int que indica aproximadamente la distancia</returns> public int Distancia(Circulo circuloB) { int difX = circuloB.X - X; int difY = circuloB.Y - Y; int distC = difX * difX + difY * difY; return (int)Math.Sqrt(distC); }