/** * Attempts to center the camera on the sprite */ public void centerCamera(ISprite s) { isCentered = true; centerSprite = s; this.center_X_Displacement = output.Width / 2 - s.getImage().Width; this.center_Y_Displacement = output.Height / 2 - s.getImage().Height; }
private void calculateDisplacement() { if (isCentered) { displacementX += centerSprite.getImage().Width *isDisplacedX(); displacementY += centerSprite.getImage().Height *isDisplacedY(); } else { displacementX = 0; displacementY = 0; } }
/** * Combines all images in the queue onto the output image * Starts with a clean background each time * Images appear stacked on top of each other, with the last added to the * queue on top * Sprites are rendered first, text is always rendered last * * (Note by Nathan, this method could be optimized (?*) to distribute * the load of drawing each sprite in the queue to instead be done * whenever a sprite is added. *Wouldn't change the total time needed.) * @author Nathan Swartz, Benjamin Lippincott */ public void Render() { if (this.hasChanged) { Graphics g = Graphics.FromImage(output); g.DrawImage(background, 0, 0); calculateDisplacement(); // render each renderable's sprite that is displaying foreach (KeyValuePair <int, LinkedList <Renderable> > kvp in layers) { foreach (Renderable renderable in kvp.Value) { if (renderable.isDisplaying()) { ISprite s = renderable.getSprite(); g.DrawImage(s.getImage(), s.getX() + displacementX, s.getY() + displacementY); } } } // render each text overlay, on top of every other layer foreach (TextOverlay t in texts) { using (Font f = t.getFont()) { g.DrawString(t.getMessage(), f, Brushes.Black, new PointF(t.getX(), t.getY())); } } g.Dispose(); this.hasChanged = false; } }