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); } }
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); }
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); }
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); }
public void Execute() { CollisionContainer.getInstance().Add(sc); sc = null; //Clean up reference for garbage collection }