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
|
/* 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 MADS_ACTION_H
#define MADS_ACTION_H
#include "common/scummsys.h"
#include "common/serializer.h"
#include "common/str.h"
namespace MADS {
enum TriggerMode {
SEQUENCE_TRIGGER_NONE = -1,
SEQUENCE_TRIGGER_PARSER = 0, // Triggers parser
SEQUENCE_TRIGGER_DAEMON = 1, // Triggers step/daemon code
SEQUENCE_TRIGGER_PREPARE = 2 // Triggers preparser
};
enum InterAwaiting {
AWAITING_NONE = 0,
AWAITING_COMMAND = 1, // Initial state: waiting for a command verb
AWAITING_THIS = 2, // Waiting for object
AWAITING_THAT = 3, // Waiting for a second object
AWAITING_RIGHT_MOUSE = 4 // Waiting for mouse button release
};
enum {
VERB_NONE = 0,
VERB_LOOK = 3,
VERB_TAKE = 4,
VERB_PUSH = 5,
VERB_OPEN = 6,
VERB_PUT = 7,
VERB_TALKTO = 8,
VERB_GIVE = 9,
VERB_PULL = 10,
VERB_CLOSE = 11,
VERB_THROW = 12,
VERB_WALKTO = 13
};
enum VerbType { VERB_ONLY, VERB_THIS, VERB_THAT, VERB_INIT };
enum PrepType {
PREP_NONE, PREP_WITH, PREP_TO, PREP_AT, PREP_FROM, PREP_ON, PREP_IN,
PREP_UNDER, PREP_BEHIND, PREP_RELATIONAL = 0xff
};
enum ScrCategory {
CAT_NONE = 0, CAT_COMMAND = 1, CAT_INV_LIST = 2, CAT_INV_VOCAB = 3,
CAT_HOTSPOT = 4, CAT_INV_ANIM = 5, CAT_TALK_ENTRY = 6, CAT_INV_SCROLLER = 7,
CAT_12 = 12
};
class MADSEngine;
struct ActionDetails {
int _verbId;
int _objectNameId;
int _indirectObjectId;
/**
* Synchronize the action details
*/
void synchronize(Common::Serializer &s);
};
struct ActionSavedFields {
bool _commandError;
int _commandSource;
int _command;
int _mainObject;
int _secondObject;
int _mainObjectSource;
int _secondObjectSource;
int _articleNumber;
int _lookFlag;
/**
* Synchronize the saved action details
*/
void synchronize(Common::Serializer &s);
};
class MADSAction {
private:
MADSEngine *_vm;
Common::String _statusText;
void appendVocab(int vocabId, bool capitalize = false);
void startWalkingDirectly(int walkType);
public:
ActionDetails _action, _activeAction;
int _articleNumber;
bool _lookFlag;
int _selectedRow;
bool _textChanged;
int _selectedAction;
int _statusTextIndex;
int _hotspotId;
ActionSavedFields _savedFields;
Common::String _sentence;
VerbType _verbType;
PrepType _prepType;
ScrCategory _commandSource;
ScrCategory _mainObjectSource;
int _secondObject;
ScrCategory _secondObjectSource;
ScrCategory _recentCommandSource;
bool _pointEstablished;
int _recentCommand;
InterAwaiting _interAwaiting;
bool _inProgress;
int _pickedWord;
public:
MADSAction(MADSEngine *vm);
void clear();
void set();
const Common::String &statusText() const { return _statusText; }
void refresh();
/**
* Accepts the currently defined sentence from the ScreenObjects parser.
* Copies the data, and checks to see if the action requires the player
* to walk to the given hotspot.
*/
void startAction();
void checkAction();
bool isAction(int verbId, int objectNameId = 0, int indirectObjectId = 0);
bool isObject(int objectNameId);
bool isTarget(int objectNameId);
/**
* Check the result of the current action on the sentence
* with the provision that the action is not yet complete.
*/
void checkActionAtMousePos();
/**
* Execute a click within the scene
*/
void leftClick();
/**
* Synchronize the saved action details
*/
void synchronize(Common::Serializer &s);
};
} // End of namespace MADS
#endif /* MADS_ACTION_H */
|