aboutsummaryrefslogtreecommitdiff
path: root/engines/parallaction/objects.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/parallaction/objects.cpp')
-rw-r--r--engines/parallaction/objects.cpp20
1 files changed, 15 insertions, 5 deletions
diff --git a/engines/parallaction/objects.cpp b/engines/parallaction/objects.cpp
index b91644d02d..6aeae3a92f 100644
--- a/engines/parallaction/objects.cpp
+++ b/engines/parallaction/objects.cpp
@@ -289,7 +289,7 @@ int16 ScriptVar::getValue() {
}
if (_flags & kParaField) {
- return *_pvalue;
+ return _field->getValue();
}
if (_flags & kParaRandom) {
@@ -311,7 +311,7 @@ void ScriptVar::setValue(int16 value) {
}
if (_flags & kParaField) {
- *_pvalue = value;
+ _field->setValue(value);
}
}
@@ -321,11 +321,16 @@ void ScriptVar::setLocal(LocalVariable *local) {
_flags |= (kParaLocal | kParaLValue);
}
-void ScriptVar::setField(int16 *field) {
- _pvalue = field;
+void ScriptVar::setField(Animation *anim, AnimationField::AccessorFunc accessor, AnimationField::MutatorFunc mutator) {
+ _field = new AnimationField(anim, accessor, mutator);
_flags |= (kParaField | kParaLValue);
}
+void ScriptVar::setField(Animation *anim, AnimationField::AccessorFunc accessor) {
+ _field = new AnimationField(anim, accessor);
+ _flags |= kParaField;
+}
+
void ScriptVar::setImmediate(int16 value) {
_value = value;
_flags |= kParaImmediate;
@@ -341,9 +346,14 @@ ScriptVar::ScriptVar() {
_flags = 0;
_local = 0;
_value = 0;
- _pvalue = 0;
+ _field = 0;
}
+ScriptVar::~ScriptVar() {
+ delete _field;
+}
+
+
Table::Table(uint32 size) : _size(size), _used(0), _disposeMemory(true) {
_data = (char**)calloc(size, sizeof(char*));
}