Exemple #1
0
 /// <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;
 }
Exemple #3
0
 /// <summary>
 /// Removes the projectile.
 /// </summary>
 /// <param name="projectile">The projectile.</param>
 public void RemoveProjectile(Projectile projectile)
 {
     lock (projectiles)
     {
         projectiles.Remove(projectile);
     }
 }