aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/fullpipe/motion.cpp49
-rw-r--r--engines/fullpipe/motion.h42
-rw-r--r--engines/fullpipe/utils.cpp6
3 files changed, 83 insertions, 14 deletions
diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp
index 815b0c365e..a25d47505b 100644
--- a/engines/fullpipe/motion.cpp
+++ b/engines/fullpipe/motion.cpp
@@ -116,4 +116,53 @@ bool CMovGraphNode::load(MfcArchive &file) {
return true;
}
+CReactParallel::CReactParallel() {
+ _x1 = 0;
+ _x2 = 0;
+ _dy = 0;
+ _dx = 0;
+ _points = 0;
+ _y1 = 0;
+ _y2 = 0;
+}
+
+bool CReactParallel::load(MfcArchive &file) {
+ _x1 = file.readUint32LE();
+ _y1 = file.readUint32LE();
+ _x2 = file.readUint32LE();
+ _y2 = file.readUint32LE();
+ _dx = file.readUint32LE();
+ _dy = file.readUint32LE();
+
+ createRegion();
+
+ return true;
+}
+
+void CReactParallel::createRegion() {
+ _points = (Common::Point **)malloc(sizeof(Common::Point *) * 4);
+
+ for (int i = 0; i < 4; i++)
+ _points[i] = new Common::Point;
+
+ double at = atan2(_x1 - _x2, _y1 - _y2) + 1.570796;
+ double sn = sin(at);
+ double cs = cos(at);
+
+ _points[0]->x = (int16)(_x1 - _dx * cs);
+ _points[0]->y = (int16)(_y1 - _dx * sn);
+
+ _points[1]->x = (int16)(_x2 - _dx * cs);
+ _points[1]->y = (int16)(_y2 - _dx * sn);
+
+ _points[2]->x = (int16)(_x1 + _dy * cs);
+ _points[2]->y = (int16)(_y2 + _dy * sn);
+
+ _points[3]->x = (int16)(_x1 + _dy * cs);
+ _points[3]->y = (int16)(_y1 + _dy * sn);
+
+ // GdiObject::Attach(_rgn, CreatePolygonRgn(_points, 4, 2);
+}
+
+
} // End of namespace Fullpipe
diff --git a/engines/fullpipe/motion.h b/engines/fullpipe/motion.h
index 508a7f7af6..f5e8632b26 100644
--- a/engines/fullpipe/motion.h
+++ b/engines/fullpipe/motion.h
@@ -88,22 +88,38 @@ class CMovGraphReact : public CObject {
// Empty
};
+class CReactParallel : public CMovGraphReact {
+ //CRgn _rgn;
+ int _x1;
+ int _y1;
+ int _x2;
+ int _y2;
+ int _dx;
+ int _dy;
+ Common::Point **_points;
+
+ public:
+ CReactParallel();
+ virtual bool load(MfcArchive &file);
+ void createRegion();
+};
+
class CMovGraphLink : public CObject {
- CMovGraphNode *_movGraphNode1;
- CMovGraphNode *_movGraphNode2;
- CDWordArray _dwordArray1;
- CDWordArray _dwordArray2;
- int _flags;
- int _field_38;
- int _field_3C;
- double _distance;
- double _angle;
- CMovGraphReact *_movGraphReact;
- char *_name;
+ CMovGraphNode *_movGraphNode1;
+ CMovGraphNode *_movGraphNode2;
+ CDWordArray _dwordArray1;
+ CDWordArray _dwordArray2;
+ int _flags;
+ int _field_38;
+ int _field_3C;
+ double _distance;
+ double _angle;
+ CMovGraphReact *_movGraphReact;
+ char *_name;
public:
- CMovGraphLink();
- virtual bool load(MfcArchive &file);
+ CMovGraphLink();
+ virtual bool load(MfcArchive &file);
};
class CMovGraph : public CMotionController {
diff --git a/engines/fullpipe/utils.cpp b/engines/fullpipe/utils.cpp
index 4add1bae22..df6c869a82 100644
--- a/engines/fullpipe/utils.cpp
+++ b/engines/fullpipe/utils.cpp
@@ -83,7 +83,8 @@ enum {
kCMctlCompound,
kCMovGraph,
kCMovGraphLink,
- kCMovGraphNode
+ kCMovGraphNode,
+ kCReactParallel
};
const struct {
@@ -99,6 +100,7 @@ const struct {
{ "CMovGraph", kCMovGraph },
{ "CMovGraphLink", kCMovGraphLink },
{ "CMovGraphNode", kCMovGraphNode },
+ { "CReactParallel", kCReactParallel },
{ 0, 0 }
};
@@ -133,6 +135,8 @@ static CObject *createObject(int objectId) {
return new CMovGraphLink();
case kCMovGraphNode:
return new CMovGraphNode();
+ case kCReactParallel:
+ return new CReactParallel();
default:
error("Unknown objectId: %d", objectId);
}