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 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243
|
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program 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 3 of the License, or
* (at your option) any later version.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/*
* This code is based on the CRAB engine
*
* Copyright (c) Arvind Raja Yadav
*
* Licensed under MIT
*
*/
#ifndef CRAB_GAMEEVENTINFO_H
#define CRAB_GAMEEVENTINFO_H
#include "crab/stat/StatTemplate.h"
#include "crab/ui/Inventory.h"
#include "crab/ui/journal.h"
namespace Crab {
namespace pyrodactyl {
namespace event {
bool isChar(char c);
class Info {
// The characters in the game
pyrodactyl::people::PersonMap _people;
// The stat templates used in declaring person objects
pyrodactyl::stat::StatTemplates _stem;
// The variables set by the events so far
typedef Common::HashMap<Common::String, int> VarMap;
VarMap _var;
// The last object player interacted with
Common::String _lastobj;
// Is the game Iron Man or not?
// Iron man means only one save - no reloading
bool _ironman;
// The player's current location
struct PlayerLoc {
// id of the player's current location
Common::String _id;
// The name of the player's current location
Common::String _name;
PlayerLoc() {}
} _loc;
// This image changes to reflect the playable character
int _playerImg;
void loadPeople(const Common::Path &filename);
public:
// The player's one stop shop for objectives and lore
pyrodactyl::ui::Journal _journal;
// The current player inventory
pyrodactyl::ui::Inventory _inv;
// This structure keeps track of unread indicators
struct UnreadData {
bool _inventory, _journal, _trait, _map;
UnreadData() {
_inventory = false;
_journal = false;
_trait = true;
_map = false;
}
} _unread;
// This is the variable corresponding to money that is drawn
Common::String _moneyVar;
// Has the player pressed the talk key
bool _talkKeyDown;
// Used so we only play one sound per event
struct NotifySounds {
bool _notify, _repInc, _repDec;
NotifySounds() {
_notify = false;
_repInc = false;
_repDec = false;
}
} _sound;
Info() {
Init();
}
~Info() {}
void Init() {
_lastobj = "";
_ironman = false;
_playerImg = 0;
_talkKeyDown = false;
}
void load(rapidxml::xml_node<char> *node);
// Person related stuff
void type(const Common::String &id, const pyrodactyl::people::PersonType &val);
pyrodactyl::people::PersonType type(const Common::String &id);
void state(const Common::String &id, const pyrodactyl::people::PersonState &val);
pyrodactyl::people::PersonState state(const Common::String &id);
// Opinion
bool opinionGet(const Common::String &name, const pyrodactyl::people::OpinionType &type, int &val);
void opinionSet(const Common::String &name, const pyrodactyl::people::OpinionType &type, int val);
void opinionChange(const Common::String &name, const pyrodactyl::people::OpinionType &type, int val);
// Stats
bool statGet(const Common::String &name, const pyrodactyl::stat::StatType &type, int &num);
void statSet(const Common::String &name, const pyrodactyl::stat::StatType &type, const int &num);
void statChange(const Common::String &name, const pyrodactyl::stat::StatType &type, const int &num);
// Variables
bool varGet(const Common::String &name, int &val);
void varSet(const Common::String &name, const Common::String &val);
void varAdd(const Common::String &name, const int &val);
void varSub(const Common::String &name, const int &val);
void varMul(const Common::String &name, const int &val);
void varDiv(const Common::String &name, const int &val);
void varDel(const Common::String &name);
// The trait functions
void traitAdd(const Common::String &perId, const int &traitId);
void traitDel(const Common::String &perId, const int &traitId);
// Player character button
void playerImg(const int &val) {
_playerImg = val;
}
int playerImg() {
return _playerImg;
}
Common::String curLocID() {
return _loc._id;
}
void curLocID(const Common::String &id) {
_loc._id = id;
}
Common::String curLocName() {
return _loc._name;
}
void curLocName(const Common::String &name) {
_loc._name = name;
}
// Player stuff
Common::String lastPerson() {
return _lastobj;
}
void lastPerson(const Common::String &name) {
_lastobj = name;
}
// Return the variable map for stuff like visibility checks
VarMap &mapGet() {
return _var;
}
bool personGet(const Common::String &id, pyrodactyl::people::Person &p);
bool personValid(const Common::String &id);
pyrodactyl::people::Person &personGet(const Common::String &id);
// Is an object colliding with a trigger area
bool collideWithTrigger(const Common::String &id, int rectIndex);
// Replace all #values with their appropriate names in a string
void insertName(Common::String &msg);
Common::String getName(const Common::String &id);
// Draw the inventory
void invDraw(const Common::String &id) {
if (_var.contains(_moneyVar))
_inv.draw(_people[id], _var[_moneyVar]);
else
_inv.draw(_people[id], 0);
}
// Get whether game is iron man or not
bool ironMan() {
return _ironman;
}
void ironMan(const bool &val) {
_ironman = val;
}
void loadIronMan(rapidxml::xml_node<char> *node) {
Common::String str;
loadStr(str, "diff", node);
_ironman = (str == "Iron Man");
}
void saveState(rapidxml::xml_document<> &doc, rapidxml::xml_node<char> *root);
void loadState(rapidxml::xml_node<char> *node);
void setUI();
};
} // End of namespace event
} // End of namespace pyrodactyl
} // End of namespace Crab
#endif // CRAB_GAMEEVENTINFO_H
|