convert line ends
[canaan.git] / prj / cam / src / shock / shkcmobj.cpp
blob885df987f4a1315b14547a0e89ecd689a8698ab1
1 /*
2 @Copyright Looking Glass Studios, Inc.
3 1996,1997,1998,1999,2000 Unpublished Work.
4 */
6 ////////////////////////////////////////
7 // $Header: r:/t2repos/thief2/src/shock/shkcmobj.cpp,v 1.3 1999/05/30 20:30:57 JON Exp $
8 //
10 #include <shkcmobj.h>
12 #include <appagg.h>
13 #include <aggmemb.h>
14 #include <memall.h>
16 #include <matrix.h>
18 #include <propbase.h>
20 #include <camera.h>
21 #include <objpos.h>
22 #include <playrobj.h>
24 #include <shkcobpr.h>
26 // Include these absolutely last
27 #include <dbmem.h>
28 #include <initguid.h>
30 DEFINE_LG_GUID(IID_ICameraObjects, 0x243);
32 class cCameraObjects:
33 public cCTDelegating<ICameraObjects>,
34 public cCTAggregateMemberControl<kCTU_Default>
36 public:
37 cCameraObjects(IUnknown* pOuter)
39 MI_INIT_AGGREGATION_1(pOuter, ICameraObjects, kPriorityNormal, NULL);
42 STDMETHOD(Frame)(tSimTime deltaTime);
44 private:
45 void UpdatePosition(ObjID objID);
48 ////////////////////////////////////////
50 void cCameraObjects::UpdatePosition(ObjID objID)
52 cCameraObj *pCameraObj;
53 mxs_vector camPos;
54 mxs_angvec camFacing;
55 mxs_vector loc;
56 mxs_matrix m1;
57 mxs_vector offset;
58 mxs_angvec facing;
60 g_CameraObjProperty->Get(objID, &pCameraObj);
61 Assert_(pCameraObj != NULL);
63 // Get base location/facing
64 CameraGetLocation(PlayerCamera(), &camPos, &camFacing);
65 // turn player facing into matrix
66 mx_ang2mat(&m1, &camFacing);
68 // add offset
69 mx_mat_mul_vec(&offset, &m1, &pCameraObj->m_offset);
70 mx_add_vec(&loc, &camPos, &offset);
72 if ((!pCameraObj->m_lockang[1]) && (pCameraObj->m_lockang[2]))
74 mxs_matrix m2;
75 mx_rot_z_mat(&m2, &m1, -camFacing.tz+pCameraObj->m_angle.tz);
76 mx_mat2ang(&facing, &m2);
78 else
80 facing.tx = pCameraObj->m_angle.tx;
81 if (!pCameraObj->m_lockang[0])
82 facing.tx += camFacing.tx;
84 facing.ty = pCameraObj->m_angle.ty;
85 if (!pCameraObj->m_lockang[1])
86 facing.ty += camFacing.ty;
88 facing.tz = pCameraObj->m_angle.tz;
89 if (!pCameraObj->m_lockang[2])
90 facing.tz += camFacing.tz;
94 // update actual obj pos
95 ObjPosUpdate(objID, &loc, &facing);
98 ////////////////////////////////////////
100 STDMETHODIMP cCameraObjects::Frame(tSimTime timeDelta)
102 sPropertyObjIter iter;
103 ObjID objID;
105 g_CameraObjProperty->IterStart(&iter);
106 while (g_CameraObjProperty->IterNext(&iter, &objID))
107 UpdatePosition(objID);
108 g_CameraObjProperty->IterStop(&iter);
109 return S_OK;
112 ////////////////////////////////////////
114 void ShockCameraObjectsCreate(void)
116 AutoAppIPtr(Unknown);
117 new cCameraObjects(pUnknown);