2 @Copyright Looking Glass Studios, Inc.
3 1996,1997,1998,1999,2000 Unpublished Work.
6 // $Header: r:/t2repos/thief2/src/shock/shkrloop.cpp,v 1.26 2000/02/19 13:26:07 toml Exp $
39 #include <dbmem.h> // must be last header!
43 /////////////////////////////////////////////////////////////
44 // AIR SIMULATION LOOP CLIENT
45 ////////////////////////////////////////////////////////////
50 // These are just here to separate out boiler-plate code and leave it untouched
54 #define MY_FACTORY ShockRenderLoopFactory
55 #define MY_GUID LOOPID_ShockRender
61 typedef struct _StateRecord
63 Context
* context
; // a pointer to the context data I got.
65 // State fields go here
68 ////////////////////////////////////////
70 // LOOP/DISPATCH callback
71 // Here's where we do the dirty work.
74 #pragma off(unreferenced)
75 static eLoopMessageResult LGAPI
_LoopFunc(void* data
, eLoopMessage msg
, tLoopMessageData hdata
)
77 // useful stuff for most clients
78 eLoopMessageResult result
= kLoopDispatchContinue
;
79 StateRecord
* state
= (StateRecord
*)data
;
90 state
->initted
= TRUE
;
96 state
->initted
= FALSE
;
100 case kMsgNormalFrame
:
101 //gr_pop_canvas(); // from the sub-canvas of before in shkrlup2
102 //gr_close_canvas(&shock_rend_canvas);
103 // a brutal, and godawful hack!
104 // someone kill me now.
106 if (SimStateCheckFlags(kSimRender
))
108 ShockOverlayDrawBuffers();
110 ScrnLockDrawCanvas();
112 ShockOverlayDoFrame();
115 extern void ShockDrawCursor(Point pt
);
117 mouse_get_xy(&pt
.x
,&pt
.y
);
119 //DrawByHandleCenter(gCursorHnd,pt);
124 ScrnUnlockDrawCanvas();
126 // ShockOverlayDrawBuffers();
128 //update_player_medium_sounds();
129 //shock_rend_update_frame();
134 shock_init_object_rend();
135 shock_init_renderer();
138 shock_term_object_rend();
139 shock_term_renderer();
149 ////////////////////////////////////////////////////////////
150 // Frome here on in is boiler plate code.
151 // Nothing need be changed.
156 // Loop client factory function.
159 #pragma off(unreferenced)
160 static ILoopClient
* LGAPI
_CreateClient(sLoopClientDesc
* desc
, tLoopClientData data
)
163 // allocate space for our state, and fill out the fields
164 state
= (StateRecord
*)Malloc(sizeof(StateRecord
));
165 memset(state
,0,sizeof(*state
));
166 state
->context
= (Context
*)data
;
168 return CreateSimpleLoopClient(_LoopFunc
,state
,desc
);
170 #pragma on(unreferenced)
176 sLoopClientDesc ShockRenderClientDesc
=
179 "Shock Rendering", // NAME
180 kPriorityNormal
, // PRIORITY
181 kMsgEnd
| kMsgsMode
| kMsgsFrameMid
| kMsgsAppOuter
, // INTERESTS
189 {kConstrainAfter
, &LOOPID_SimFinish
, kMsgsFrame
},
190 {kConstrainAfter
, &LOOPID_Render
, kMsgsFrameMid
|kMsgsAppOuter
},
191 {kConstrainAfter
, &LOOPID_RenderBase
, kMsgsAppOuter
},
192 {kConstrainAfter
, &LOOPID_ObjSys
, kMsgsAppOuter
},
193 {kConstrainAfter
, &LOOPID_ScrnMan
, kMsgsMode
},
194 {kConstrainAfter
, &LOOPID_UI
, kMsgsMode
},
195 {kNullConstraint
} // terminator