diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2004-12-25 13:38:16 +0000 |
---|---|---|
committer | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2004-12-25 13:38:16 +0000 |
commit | c784dea82dbeee0133077a1b673f5652c59c2f77 (patch) | |
tree | 7938863c75b3ff25aa8f22c71f50d35fa0a408fa /src/graphic/image.cpp | |
parent | 9a43b5e189e408253e77864c38a3b3dbb6f620a1 (diff) | |
download | mana-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.cpp | 116 |
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)); +} |