summaryrefslogtreecommitdiff
path: root/src/graphic/graphic.h
blob: 5b61bb282bc7f2107491dca4dd936de3b6341d91 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*
 *  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
 *
 *  $Id$
 */

#ifndef _GRAPHIC_H
#define _GRAPHIC_H

class Graphics;

#include "../map.h"
#include "../gui/npc.h"
#include "../gui/npc_text.h"
#include "../gui/buy.h"
#include "../gui/sell.h"
#include "../gui/buysell.h"
#include "../gui/chat.h"
#include "../gui/inventory.h"
#include "../gui/shop.h"
#include "../gui/chat.h"
#include "../gui/inventory.h"
#include "../gui/npc.h"
#include "../gui/status.h"
#include "../gui/stats.h"
#include "../gui/skill.h"
#include "../resources/resourcemanager.h"
#include "spriteset.h"
#include <allegro.h>
#include <guichan/allegro.hpp>

#define TILE_SIZE 32

extern BITMAP *buffer;
extern char speech[255];
extern char npc_text[1000];
extern char skill_points[10];
extern ChatBox *chatBox;
extern bool show_skill_dialog, show_skill_list_dialog;
extern int show_npc_dialog;
extern int map_x, map_y, camera_x, camera_y;
extern char npc_button[10];

extern StatusWindow *statusWindow;
extern BuyDialog *buyDialog;
extern SellDialog *sellDialog;
extern BuySellDialog *buySellDialog;
extern InventoryWindow *inventoryWindow;
extern NpcListDialog *npcListDialog;
extern NpcTextDialog *npcTextDialog;
extern SkillDialog *skillDialog;
extern StatsWindow *statsWindow;

char get_x_offset(char, char);
char get_y_offset(char, char);

/**
 * The action listener for the chat field.
 */
class ChatListener : public gcn::ActionListener {
    public:
        void action(const std::string& eventId);
};

/**
 * The action listener for the buy or sell dialog.
 */
class BuySellListener : public gcn::ActionListener {
    public:
        void action(const std::string& eventId);
};

/**
 * A central point of control for graphics.
 */
class Graphics : public gcn::AllegroGraphics {
    public:
        /**
         * Constructor.
         */
        Graphics();

        /**
         * Destructor.
         */
        ~Graphics();

        /**
         * Draws a rectangle using 4 corner images, 4 side images and 1 image
         * for the inside.
         */
        void drawImageRect(
                int x, int y, int w, int h,
                Image *topLeft, Image *topRight,
                Image *bottomLeft, Image *bottomRight,
                Image *top, Image *right,
                Image *bottom, Image *left,
                Image *center);

        /**
         * Updates the screen. This is done by either copying the buffer to the
         * screen or swapping pages.
         */
        void updateScreen();
};

/**
 * Game engine that does the main drawing.
 */
class Engine {
    private:
        Spriteset *tileset, *emotionset, *npcset, *monsterset;

    public:
        Engine();
        ~Engine();

        void draw();
};

#endif