예제 #1
0
 public void Collisions()
 {
     foreach (PhysicsSet p in ps)
     {
         LookupLinkedListSet <Entity> q1 = ents[p.Class1], q2 = ents[p.Class2];
         foreach (Entity e1 in q1)
         {
             foreach (Entity e2 in q2)
             {
                 if (e1.Shape.Meets(e1.Position, e2.Shape, e2.Position))
                 {
                     foreach (OnCollision o in p.CollisionHandlers)
                     {
                         GameEvent gev = o(e1, e2);
                         if (gev != null)
                         {
                             game.Events.Add(gev);
                         }
                     }
                 }
                 else
                 {
                     foreach (OnDisconnect o in p.DisconnectHandlers)
                     {
                         GameEvent gev = o(e1, e2);
                         if (gev != null)
                         {
                             game.Events.Add(gev);
                         }
                     }
                 }
             }
         }
     }
 }
예제 #2
0
 public AdvancedEntityManager(PhysicsManager phys, RenderManager renders, params double[] ints)
 {
     pm             = phys;
     rm             = renders;
     oldTime        = 0;
     entities       = new LookupLinkedListSet <Entity>();
     bulletShooters = new LookupLinkedListSet <Entity>();
 }
예제 #3
0
 public void RemovePermanently(Entity e)
 {
     if (ents.ContainsKey(e.RenderClass))
     {
         ents[e.RenderClass].RemovePermanently(e);
     }
     else
     {
         LookupLinkedListSet <Entity> lls = new LookupLinkedListSet <Entity>();
         ents[e.RenderClass] = lls;
     }
 }
예제 #4
0
 public void Remove(Entity e)
 {
     if (ents.ContainsKey(e.PhysicsClass))
     {
         ents[e.PhysicsClass].Remove(e);
     }
     else
     {
         LookupLinkedListSet <Entity> lls = new LookupLinkedListSet <Entity>();
         ents[e.PhysicsClass] = lls;
     }
 }
예제 #5
0
 public void Add(Entity e)
 {
     //Console.WriteLine(e.RenderClass);
     if (ents.ContainsKey(e.RenderClass))
     {
         ents[e.RenderClass].Add(e);
     }
     else
     {
         LookupLinkedListSet <Entity> lls = new LookupLinkedListSet <Entity>();
         lls.Add(e);
         ents[e.RenderClass] = lls;
     }
 }
예제 #6
0
        public void AddDisconnectHandler(Id p1, Id p2, OnDisconnect ch)
        {
            foreach (PhysicsSet p in ps)
            {
                if ((p.Class1.Equals(p1) && p.Class2.Equals(p2)) || (p.Class2.Equals(p1) && p.Class1.Equals(p2)))
                {
                    p.DisconnectHandlers.Add(ch);
                    return;
                }
            }
            if (!ents.ContainsKey(p1))
            {
                ents[p1] = new LookupLinkedListSet <Entity>();
            }
            if (!ents.ContainsKey(p2))
            {
                ents[p2] = new LookupLinkedListSet <Entity>();
            }
            PhysicsSet newset = new PhysicsSet(p1, p2);

            newset.DisconnectHandlers.Add(ch);
            ps.Add(newset);
        }