123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- #pragma once
- #include "../UIFramework/CIntObject.h"
- struct SDL_Surface;
- class CDefHandler;
- class CGHeroInstance;
- class CBattleInterface;
- class CPicture;
- class CAdventureMapButton;
- class CHighlightableButton;
- class CHighlightableButtonsGroup;
- class CLabel;
- struct BattleResult;
- class CStack;
- class CAnimImage;
- /*
- * CBattleInterfaceClasses.h, part of VCMI engine
- *
- * Authors: listed in file AUTHORS in main folder
- *
- * License: GNU General Public License v2.0 or later
- * Full text of license available in license.txt file, in main folder
- *
- */
- /// Class which shows the console at the bottom of the battle screen and manages the text of the console
- class CBattleConsole : public CIntObject
- {
- private:
- std::vector< std::string > texts; //a place where texts are stored
- int lastShown; //last shown line of text
- public:
- std::string alterTxt; //if it's not empty, this text is displayed
- std::string ingcAlter; //alternative text set by in-game console - very important!
- int whoSetAlter; //who set alter text; 0 - battle interface or none, 1 - button
- CBattleConsole();
- void showAll(SDL_Surface * to = 0);
- bool addText(const std::string &text); //adds text at the last position; returns false if failed (e.g. text longer than 70 characters)
- void alterText(const std::string &text); //place string at alterTxt
- void eraseText(ui32 pos); //erases added text at position pos
- void changeTextAt(const std::string &text, ui32 pos); //if we have more than pos texts, pos-th is changed to given one
- void scrollUp(ui32 by = 1); //scrolls console up by 'by' positions
- void scrollDown(ui32 by = 1); //scrolls console up by 'by' positions
- };
- /// Hero battle animation
- class CBattleHero : public CIntObject
- {
- void switchToNextPhase();
- public:
- bool flip; //false if it's attacking hero, true otherwise
- CDefHandler *dh, *flag; //animation and flag
- const CGHeroInstance * myHero; //this animation's hero instance
- const CBattleInterface * myOwner; //battle interface to which this animation is assigned
- int phase; //stage of animation
- int nextPhase; //stage of animation to be set after current phase is fully displayed
- int currentFrame, firstFrame, lastFrame; //frame of animation
- ui8 flagAnim, animCount; //for flag animation
- void show(SDL_Surface * to); //prints next frame of animation to to
- void setPhase(int newPhase); //sets phase of hero animation
- void clickLeft(tribool down, bool previousState); //call-in
- CBattleHero(const std::string &defName, bool filpG, PlayerColor player, const CGHeroInstance *hero, const CBattleInterface *owner); //c-tor
- ~CBattleHero(); //d-tor
- };
- /// Class which manages the battle options window
- class CBattleOptionsWindow : public CIntObject
- {
- private:
- CPicture * background;
- CAdventureMapButton * setToDefault, * exit;
- CHighlightableButton * viewGrid, * movementShadow, * mouseShadow;
- CHighlightableButtonsGroup * animSpeeds;
- std::vector<CLabel*> labels;
- public:
- CBattleOptionsWindow(const Rect &position, CBattleInterface *owner); //c-tor
- void bDefaultf(); //default button callback
- void bExitf(); //exit button callback
- };
- /// Class which is responsible for showing the battle result window
- class CBattleResultWindow : public CIntObject
- {
- private:
- CAdventureMapButton *exit;
- CBattleInterface *owner;
- public:
- CBattleResultWindow(const BattleResult & br, const Rect & pos, CBattleInterface * _owner); //c-tor
- ~CBattleResultWindow(); //d-tor
- void bExitf(); //exit button callback
- void activate();
- void show();
- };
- /// Class which stands for a single hex field on a battlefield
- class CClickableHex : public CIntObject
- {
- private:
- bool setAlterText; //if true, this hex has set alternative text in console and will clean it
- public:
- ui32 myNumber; //number of hex in commonly used format
- bool accessible; //if true, this hex is accessible for units
- //CStack * ourStack;
- bool hovered, strictHovered; //for determining if hex is hovered by mouse (this is different problem than hex's graphic hovering)
- CBattleInterface * myInterface; //interface that owns me
- static Point getXYUnitAnim(const int & hexNum, const bool & attacker, const CStack * creature, const CBattleInterface * cbi); //returns (x, y) of left top corner of animation
- //for user interactions
- void hover (bool on);
- void mouseMoved (const SDL_MouseMotionEvent &sEvent);
- void clickLeft(tribool down, bool previousState);
- void clickRight(tribool down, bool previousState);
- CClickableHex();
- };
- /// Shows the stack queue
- class CStackQueue : public CIntObject
- {
- class StackBox : public CIntObject
- {
- public:
- CPicture * bg;
- CAnimImage * icon;
- const CStack *stack;
- bool small;
- void showAll();
- void setStack(const CStack *nStack);
- StackBox(bool small);
- };
- public:
- static const int QUEUE_SIZE = 10;
- const bool embedded;
- std::vector<const CStack *> stacksSorted;
- std::vector<StackBox *> stackBoxes;
- SDL_Surface * bg;
- CBattleInterface * owner;
- CStackQueue(bool Embedded, CBattleInterface * _owner);
- ~CStackQueue();
- void update();
- void showAll();
- void blitBg(SDL_Surface * to);
- };
|