Files
scummvm-cursorfix/engines/crab/event/GameEventInfo.h
2026-02-02 04:50:13 +01:00

244 lines
6.1 KiB
C++

/* 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