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
|
/* 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 2
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#ifndef LASTEXPRESS_SAVEPOINT_H
#define LASTEXPRESS_SAVEPOINT_H
#include "lastexpress/helpers.h"
#include "lastexpress/shared.h"
#include "common/array.h"
#include "common/list.h"
#include "common/serializer.h"
/*
Savepoint format
----------------
Save point: max: 127 - FIFO list (ie. goes back and overwrites first save point when full)
uint32 {4} - Entity 1
uint32 {4} - Action
uint32 {4} - Entity 2
uint32 {4} - Parameter
Save point Data
uint32 {4} - Entity 1
uint32 {4} - Action
uint32 {4} - Entity 2
uint32 {4} - function pointer to ??
*/
namespace LastExpress {
class LastExpressEngine;
struct SavePoint {
EntityIndex entity1;
ActionIndex action;
EntityIndex entity2;
union {
uint32 intValue;
char charValue[5];
} param;
SavePoint() {
entity1 = kEntityPlayer;
action = kActionNone;
entity2 = kEntityPlayer;
param.intValue = 0;
}
Common::String toString() {
return Common::String::format("{ %s - %d - %s - %s }", ENTITY_NAME(entity1), action, ENTITY_NAME(entity2), param.charValue);
}
};
typedef Common::Functor1<const SavePoint&, void> Callback;
class SavePoints : Common::Serializable {
public:
struct SavePointData {
EntityIndex entity1;
ActionIndex action;
EntityIndex entity2;
uint32 param;
SavePointData() {
entity1 = kEntityPlayer;
action = kActionNone;
entity2 = kEntityPlayer;
param = 0;
}
Common::String toString() {
return Common::String::format(" { %s - %d - %s - %d }", ENTITY_NAME(entity1), action, ENTITY_NAME(entity2), param);
}
};
SavePoints(LastExpressEngine *engine);
~SavePoints();
// Savepoints
void push(EntityIndex entity2, EntityIndex entity1, ActionIndex action, uint32 param = 0);
void push(EntityIndex entity2, EntityIndex entity1, ActionIndex action, const Common::String param);
void pushAll(EntityIndex entity, ActionIndex action, uint32 param = 0);
void process();
void reset();
// Data
void addData(EntityIndex entity, ActionIndex action, uint32 param);
// Callbacks
void setCallback(EntityIndex index, Callback *callback);
Callback *getCallback(EntityIndex entity) const;
void call(EntityIndex entity2, EntityIndex entity1, ActionIndex action, uint32 param = 0) const;
void call(EntityIndex entity2, EntityIndex entity1, ActionIndex action, const Common::String param) const;
void callAndProcess();
// Serializable
void saveLoadWithSerializer(Common::Serializer &s);
/**
* Convert this object into a string representation.
*
* @return A string representation of this object.
*/
Common::String toString();
uint32 count() { return _savepoints.size(); }
private:
static const uint32 _savePointsMaxSize = 128;
LastExpressEngine *_engine;
Common::List<SavePoint> _savepoints; ///< could be a queue, but we need to be able to iterate on the items
Common::Array<SavePointData> _data;
Callback *_callbacks[40];
SavePoint pop();
bool updateEntityFromData(const SavePoint &point);
};
} // End of namespace LastExpress
#endif // LASTEXPRESS_SAVEPOINT_H
|