summaryrefslogtreecommitdiffstats
path: root/src/area.c
diff options
context:
space:
mode:
authorP. J. McDermott <pjm@nac.net>2013-02-18 17:57:14 (EST)
committer P. J. McDermott <pjm@nac.net>2013-02-18 17:57:14 (EST)
commite289e1dd67d2e1b7769bb0fdd23d064a6c596b2b (patch)
treea211c8f1343fdb831cff96e4de74b3948847a08b /src/area.c
parentc250247b7be8b6a0942f7aaeaab95ad6fef933be (diff)
downloadoverworld-rpg-e289e1dd67d2e1b7769bb0fdd23d064a6c596b2b.zip
overworld-rpg-e289e1dd67d2e1b7769bb0fdd23d064a6c596b2b.tar.gz
overworld-rpg-e289e1dd67d2e1b7769bb0fdd23d064a6c596b2b.tar.bz2
Begin work on areas and viewports.
Diffstat (limited to 'src/area.c')
-rw-r--r--src/area.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/area.c b/src/area.c
new file mode 100644
index 0000000..3a03198
--- /dev/null
+++ b/src/area.c
@@ -0,0 +1,50 @@
+#include <SDL.h>
+#include "area.h"
+#include "layer.h"
+#include "viewport.h"
+
+void
+render_area_to_viewport(struct area *area, struct viewport *vp)
+{
+ SDL_Rect srcrect;
+ SDL_Rect dstrect;
+
+ srcrect.x = vp->x;
+ srcrect.y = vp->y;
+ srcrect.w = vp->w;
+ srcrect.h = vp->h;
+ dstrect.x = 0;
+ dstrect.y = 0;
+ dstrect.w = vp->w;
+ dstrect.h = vp->h;
+
+ render_area_to_surface(area, &srcrect, vp->screen, &dstrect);
+}
+
+void
+render_area_to_surface(struct area *area, SDL_Rect *arearect,
+ SDL_Surface *dst, SDL_Rect *dstrect)
+{
+ /* Fast fill with black to avoid artifacts in off-map pixels. */
+ SDL_FillRect(dst, dstrect, 0);
+
+ /* Blit ground layer. */
+ SDL_BlitSurface(area->map_layers[LAYER_GROUND], arearect,
+ dst, dstrect);
+
+ /* Blit low objects layer. */
+ SDL_BlitSurface(area->map_layers[LAYER_OBJ_LOW], arearect,
+ dst, dstrect);
+
+ /* TODO: Blit low sprites. */
+
+ /* Blit middle objects layer. */
+ SDL_BlitSurface(area->map_layers[LAYER_OBJ_MID], arearect,
+ dst, dstrect);
+
+ /* TODO: Blit high sprites. */
+
+ /* Blit high objects layer. */
+ SDL_BlitSurface(area->map_layers[LAYER_OBJ_HIGH], arearect,
+ dst, dstrect);
+}