summaryrefslogtreecommitdiff
path: root/src/graphic/image.cpp
diff options
context:
space:
mode:
authorBjørn Lindeijer <bjorn@lindeijer.nl>2004-12-25 13:38:16 +0000
committerBjørn Lindeijer <bjorn@lindeijer.nl>2004-12-25 13:38:16 +0000
commitc784dea82dbeee0133077a1b673f5652c59c2f77 (patch)
tree7938863c75b3ff25aa8f22c71f50d35fa0a408fa /src/graphic/image.cpp
parent9a43b5e189e408253e77864c38a3b3dbb6f620a1 (diff)
downloadmana-c784dea82dbeee0133077a1b673f5652c59c2f77.tar.gz
mana-c784dea82dbeee0133077a1b673f5652c59c2f77.tar.bz2
mana-c784dea82dbeee0133077a1b673f5652c59c2f77.tar.xz
mana-c784dea82dbeee0133077a1b673f5652c59c2f77.zip
Made image.cpp into module and done some more attempts at making graphics.cpp
readable.
Diffstat (limited to 'src/graphic/image.cpp')
-rw-r--r--src/graphic/image.cpp116
1 files changed, 116 insertions, 0 deletions
diff --git a/src/graphic/image.cpp b/src/graphic/image.cpp
new file mode 100644
index 00000000..da9bb1d5
--- /dev/null
+++ b/src/graphic/image.cpp
@@ -0,0 +1,116 @@
+/*
+ * The Mana World
+ * Copyright 2004 The Mana World Development Team
+ *
+ * This file is part of The Mana World.
+ *
+ * The Mana World is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * The Mana World is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with The Mana World; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * By ElvenProgrammer aka Eugenio Favalli (umperio@users.sourceforge.net)
+ */
+
+#include "image.h"
+
+
+// Image
+
+Image::Image(int offset_x, int offset_y) {
+ this->offset_x = offset_x;
+ this->offset_y = offset_y;
+}
+
+
+// RleImage
+
+RleImage::RleImage(RLE_SPRITE *src, int offset_x, int offset_y):
+ Image(offset_x, offset_y)
+{
+ this->src = src;
+}
+
+RleImage::~RleImage() {
+ destroy_rle_sprite(src);
+}
+
+void RleImage::draw(BITMAP *dest, int x, int y) {
+ draw_rle_sprite(dest, src, x + offset_x, y + offset_y);
+}
+
+
+// VideoImage
+
+VideoImage::VideoImage(BITMAP *src, int offset_x, int offset_y):
+ Image(offset_x, offset_y)
+{
+ this->src = src;
+}
+
+VideoImage::~VideoImage() {
+ destroy_bitmap(src);
+}
+
+void VideoImage::draw(BITMAP *dest, int x, int y) {
+ masked_blit(src, dest, 0, 0, x + offset_x, y + offset_y, src->w, src->h);
+}
+
+
+// Spriteset
+
+Spriteset::Spriteset(std::string filename)
+{
+ DATAFILE *datafile = load_datafile(filename.c_str());
+ if (!datafile)error("Unable to load graphic file: " + filename);
+ int i = 0;
+ while (datafile[i].type != DAT_END) {
+ Image *temp_image;
+ if (gfx_capabilities & GFX_HW_VRAM_BLIT) {
+ BITMAP *temp_video_bitmap = create_video_bitmap(
+ ((RLE_SPRITE *)datafile[i].dat)->w,
+ ((RLE_SPRITE *)datafile[i].dat)->h);
+ if (temp_video_bitmap) {
+ clear_to_color(temp_video_bitmap, makecol(255, 0, 255));
+ draw_rle_sprite(temp_video_bitmap,
+ (RLE_SPRITE *)datafile[i].dat, 0, 0);
+ temp_image = new VideoImage(temp_video_bitmap,
+ getProperty(&datafile[i], DAT_ID('X','C','R','P')),
+ getProperty(&datafile[i], DAT_ID('Y','C','R','P')));
+ } else {
+ warning("You ran out of video memory!");
+ temp_image = new RleImage(
+ (RLE_SPRITE*)datafile[i].dat,
+ getProperty(&datafile[i], DAT_ID('X','C','R','P')),
+ getProperty(&datafile[i], DAT_ID('Y','C','R','P')));
+ }
+ } else {
+ temp_image = new RleImage(
+ (RLE_SPRITE*)datafile[i].dat,
+ getProperty(&datafile[i], DAT_ID('X','C','R','P')),
+ getProperty(&datafile[i], DAT_ID('Y','C','R','P')));
+ }
+ spriteset.push_back(temp_image);
+ i++;
+ }
+}
+
+Spriteset::~Spriteset()
+{
+ for (int i = 0; i < spriteset.size(); i++) {
+ delete spriteset[i];
+ }
+}
+
+int Spriteset::getProperty(DATAFILE *datafile, int type) {
+ return atoi(get_datafile_property(datafile, type));
+}