/// <summary> /// Adds the projectile. /// </summary> /// <param name="projectile">The projectile.</param> public void AddProjectile(Projectile projectile) { lock (projectiles) { projectiles.AddLast(projectile); } }
/// <summary> /// Collisions the specified projectile. /// </summary> /// <param name="projectile">The projectile.</param> public static bool collision(Projectile projectile) { /*//TODO fix color collision xD RotatedRectangle projectileRectangle = new RotatedRectangle(new Rectangle(x, y, projectile.definition.mainTexture.Width, projectile.definition.mainTexture.Height), projectile.Rotation); //Rectangle projectileSize = new Rectangle(x, y, projectile.definition.mainTexture.Width, projectile.definition.mainTexture.Height); lock (Program.INSTANCE.npcs) { LinkedList<NPC> currentNPCs = new LinkedList<NPC>(Program.INSTANCE.npcs); foreach (NPC npc in currentNPCs) { if (npc.visible && npc.definition.mainTexture != null) { RotatedRectangle npcRectangle = new RotatedRectangle(new Rectangle(npc.getX(), npc.getY(), npc.definition.mainTexture.Width, npc.definition.mainTexture.Height), 0.0f); if (projectileRectangle.Intersects(npcRectangle)) { //Color[] pixels = new Color[projectile.definition.mainTexture.Width * npc.definition.mainTexture.Height]; //projectile.definition.mainTexture.GetData<Color>(pixels); //if (colorCollision(Color.Transparent, projectileRectangle, npcRectangle, projectile.definition.pixels, npc.definition.pixels)) // { projectile.Hit.To = npc; npc.hit(projectile.Hit); projectile.destroy(); break; //} } } } }*/ LinkedList<NPC> currentNPCS = new LinkedList<NPC>(Program.INSTANCE.npcs); Rectangle projectileRectangle = new Rectangle(projectile.getX(), projectile.getY(), projectile.definition.mainTexture.Width, projectile.definition.mainTexture.Height); //Eerst maken we een matrix aan, die passen we aan op de positie, origine en de rotatie van het projectiel. Matrix projectileMatrix = Matrix.CreateRotationZ(projectile.Rotation) * Matrix.CreateTranslation(projectile.getX(), projectile.getY(), 0) * Matrix.Identity; foreach (NPC npc in currentNPCS) { if (npc.visible && !npc.disposed) { Rectangle npcRectangle = new Rectangle(npc.getX(), npc.getY(), npc.definition.mainTexture.GetTexture().Width, npc.definition.mainTexture.GetTexture().Height); if (intersects(projectileRectangle, npcRectangle)) { //Nu maken we de NPC matrix aan. (Die heeft de standaard origine en geen rotatie) Matrix npcMatrix = Matrix.CreateTranslation(npc.getX(), npc.getY(), 0) * Matrix.Identity; Vector2 collision = texturesCollide(npc.definition.pixels, npcMatrix, projectile.definition.pixels, projectileMatrix); if (collision.X != -1 && collision.Y != -1) { projectile.Hit.To = npc; npc.hit(projectile.Hit); projectile.Dispose(); return true; } } } } return false; }
/// <summary> /// Removes the projectile. /// </summary> /// <param name="projectile">The projectile.</param> public void RemoveProjectile(Projectile projectile) { lock (projectiles) { projectiles.Remove(projectile); } }