Пример #1
0
        void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            int lastElapsed = frameDelay;

            while (isRunning)
            {
                long elapsedMilliseconds = stopwatch.ElapsedMilliseconds;

                delta = elapsedMilliseconds / 1000.0;
                stopwatch.Reset();
                stopwatch.Start();
                InputContainer.getInstance().Execute();
                MoveContainer.getInstance().Move(delta);
                CollisionContainer.getInstance().CheckCollision();
                bw.ReportProgress(1);
                int elapsed = (int)Math.Ceiling((decimal)elapsedMilliseconds);

                //The time the thread sleeps should be less if the tick took longer to run
                int sleepTime = Math.Min(frameDelay, frameDelay - (lastElapsed - frameDelay));
                //Can't wait less then 0 time
                if (sleepTime < 0)
                {
                    sleepTime = 0;
                }
                lastElapsed = elapsed;
                Thread.Sleep(sleepTime);
            }
        }
Пример #2
0
 public void die(Unit unit)
 {
     MoveContainer.getInstance().Remove(unit);
     CollisionContainer.getInstance().Remove(unit);
     DrawContainer.getInstance().Remove(unit);
     UnitContainer.getInstance().Remove(unit);
     unit._currentRound.removeUnit(unit);
 }
Пример #3
0
 public void subscribe()   //Singleton anti-pattern :(
 {
     state = UnitStateFactory.Instance.create("unit-alive");
     DrawContainer.getInstance().Add(this);
     MoveContainer.getInstance().Add(this);
     CollisionContainer.getInstance().Add(this);
     UnitContainer.getInstance().Add(this);
     _currentRound.registerUnit(this);
 }
Пример #4
0
 public void Visit(ShootCollision co)
 {
     foreach (Unit unit in co.objects.ToList())
     {
         if (co.x >= unit._x && co.x <= (unit._x + unit._imageW) && //Check the horizontal collision
             co.y >= unit._y && co.y <= (unit._y + unit._imageH))   //Check the vertical collision
         {
             unit.state          = UnitStateFactory.Instance.create("unit-dead");
             unit._maxCollisions = 0;
             Score.getInstance().addPoint();
         }
     }
     CollisionContainer.getInstance().Remove(co);
 }
Пример #5
0
 public void Execute()
 {
     CollisionContainer.getInstance().Add(sc);
     sc = null; //Clean up reference for garbage collection
 }