00001
00002
00003
00004
00005 #ifndef COM_M4NKIND_InterfacePrefObject_H
00006 #define COM_M4NKIND_InterfacePrefObject_H
00007
00008 #include "BaseObject.h"
00009 #include "PackULong_Flags.h"
00010 #include "PackLong.h"
00011 #include "PackULong_Enums.h"
00012 #include "PackList.h"
00013 #include "PackObjectReference.h"
00014 #include "PackFloat_FixedPoint.h"
00015 #include "PackFloatByte_Limits.h"
00016 class BaseContext;
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 class InterfacePrefObject : public BaseObject
00034 {
00035
00036
00037
00038 public:
00039
00040
00041
00042
00043 InterfacePrefObject(void);
00044
00045
00046
00047
00048 BASEOBJECT_DEFINE_CLASS(InterfacePrefObject);
00049 #ifdef _ENGINE_EDITABLE_
00050
00051
00052
00053
00054
00055 virtual unsigned int GetSerializedDescriptionSize(void);
00056 #endif
00057 #ifdef _ENGINE_EDITABLE_
00058
00059
00060
00061
00062
00063
00064
00065
00066 static InterfacePrefObject *GetContextActivePref(BaseContext *_pContext,bool _createOneIfNone=false);
00067 #endif
00068 #ifdef _ENGINE_EDITABLE_
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078 void SetContextEditedObject(BaseObject *_ObjectToEdit,unsigned int _EditViewIndex=0);
00079 #endif
00080 #ifdef _ENGINE_EDITABLE_
00081
00082
00083
00084
00085
00086
00087 BaseObject *GetContextEditedObject(unsigned int _EditViewIndex=0);
00088 #endif
00089 #ifdef _ENGINE_EDITABLE_
00090
00091
00092
00093
00094 void EditPrevious(unsigned int _RenderViewIndex=0);
00095 #endif
00096 #ifdef _ENGINE_EDITABLE_
00097
00098
00099
00100
00101 void EditNext(unsigned int _RenderViewIndex=0);
00102 #endif
00103 class PackObjectReferenceSpecial;
00104 friend class PackObjectReferenceSpecial;
00105
00106
00107
00108
00109 class PackObjectReferenceSpecial : public PackObjectReference
00110 { public:
00111
00112
00113 PackObjectReferenceSpecial() : PackObjectReference(){};
00114 #ifdef _ENGINE_EDITABLE_
00115
00116
00117
00118 virtual enum_SetReferenceResult SetObjectPointer( BaseObject * _Object );
00119 #endif
00120 };
00121
00122 class PackULong_Flags_Activate;
00123 friend class PackULong_Flags_Activate;
00124
00125
00126
00127 class PackULong_Flags_Activate : public PackULong_Flags
00128 { public:
00129 #ifdef _ENGINE_EDITABLE_
00130
00131
00132
00133
00134 virtual void Set(unsigned int _value);
00135 #endif
00136 };
00137
00138
00139
00140 class PreviewEdited : public PackStruct
00141 {
00142 public:
00143
00144 PackObjectReferenceSpecial mSer_Reference;
00145
00146 static const unsigned int m_PF_HistoryFlag=1;
00147
00148 static const unsigned int m_PF_PlayState=2;
00149
00150 PackULong_Flags mSer_Flag;
00151
00152 PackFloat mSer_Corner1;
00153
00154 PackFloat mSer_Corner2;
00155
00156 PackFloat mSer_PreviewPosition;
00157
00158 PackFloat mSer_PreviewRotation;
00159
00160 PackFloat mSer_PreviewStartTime;
00161
00162 PackFloat mSer_PreviewEndTime;
00163
00164 PackFloat mSer_PreviewCurrentTime;
00165
00166 PackFloat mSer_PlaySpeed;
00167
00168 PreviewEdited(void) : PackStruct()
00169 ,mSer_Corner1(PackFloat::vd_XY)
00170 ,mSer_Corner2(PackFloat::vd_XY)
00171 ,mSer_PreviewPosition(PackFloat::vd_XYZ)
00172 ,mSer_PreviewRotation(PackFloat::vd_XYZ)
00173 ,mSer_PreviewStartTime(PackFloat::vd_X)
00174 ,mSer_PreviewEndTime(PackFloat::vd_X)
00175 ,mSer_PreviewCurrentTime(PackFloat::vd_X)
00176 ,mSer_PlaySpeed(PackFloat::vd_X)
00177 {
00178
00179
00180 REGISTER_MEMBER_REFERENCE(mSer_Reference ,0L, BaseObject::m_Description );
00181 REGISTER_MEMBER_PACKULONG(mSer_Flag ,0L,0 );
00182 REGISTER_MEMBER_PACKFLOAT_XY(mSer_Corner1 ,0L,0.0f,0.0f );
00183 REGISTER_MEMBER_PACKFLOAT_XY(mSer_Corner2 ,0L,1.0f,1.0f );
00184 REGISTER_MEMBER_PACKFLOAT_XYZ(mSer_PreviewPosition ,0L,0.0f,0.0f,0.0f );
00185 REGISTER_MEMBER_PACKFLOAT_XYZ(mSer_PreviewRotation ,0L,0.0f,0.0f,0.0f );
00186 REGISTER_MEMBER_PACKFLOAT(mSer_PreviewStartTime ,0L,0.0f );
00187 REGISTER_MEMBER_PACKFLOAT(mSer_PreviewEndTime ,0L,360.0f );
00188 REGISTER_MEMBER_PACKFLOAT(mSer_PreviewCurrentTime ,0L,0.0f );
00189 REGISTER_MEMBER_PACKFLOAT(mSer_PlaySpeed ,0L,1.0f );
00190 #ifdef _ENGINE_EDITABLE_
00191 m_PreviewConfiguration.m_pManager = this;
00192 #endif
00193 };
00194 #ifdef _ENGINE_EDITABLE_
00195
00196
00197
00198 class InterfacePreviewConfiguration : public PreviewConfiguration
00199 { public:
00200 PreviewEdited *m_pManager;
00201
00202
00203 virtual void SetViewportScale(float _x1,float _y1,float _x2,float _y2) const
00204 {
00205 m_pManager->mSer_Corner1.Set(_x1);
00206 m_pManager->mSer_Corner1.Set(1,_y1);
00207 m_pManager->mSer_Corner2.Set(_x2);
00208 m_pManager->mSer_Corner2.Set(1,_y2); } ;
00209
00210 virtual void GetViewportScale(float &_x1,float &_y1,float &_x2,float &_y2) const
00211 {
00212 _x1 = m_pManager->mSer_Corner1.Get(0);
00213 _y1 = m_pManager->mSer_Corner1.Get(1);
00214 _x2 = m_pManager->mSer_Corner2.Get(0);
00215 _y2 = m_pManager->mSer_Corner2.Get(1); } ;
00216
00217 virtual void SetPreviewPosition(float _PositionX,float _PositionY,float _PositionZ ) const
00218 { m_pManager->mSer_PreviewPosition.Set(_PositionX);
00219 m_pManager->mSer_PreviewPosition.Set(1,_PositionY);
00220 m_pManager->mSer_PreviewPosition.Set(2,_PositionZ);
00221 };
00222
00223 virtual void GetPreviewPosition(float &_PositionX,float &_PositionY,float &_PositionZ ) const
00224 { _PositionX = m_pManager->mSer_PreviewPosition.Get(0);
00225 _PositionY = m_pManager->mSer_PreviewPosition.Get(1);
00226 _PositionZ = m_pManager->mSer_PreviewPosition.Get(2);
00227 };
00228
00229 void SetPreviewRotation(float _Xaxis,float _YAxis,float _ZAxis)
00230 { m_pManager->mSer_PreviewRotation.Set( _Xaxis);
00231 m_pManager->mSer_PreviewRotation.Set(1,_YAxis);
00232 m_pManager->mSer_PreviewRotation.Set(2,_ZAxis);
00233 };
00234
00235 virtual void GetPreviewRotation(float &_Xaxis,float &_YAxis,float &_ZAxis) const
00236 { _Xaxis = m_pManager->mSer_PreviewRotation.Get(0);
00237 _YAxis = m_pManager->mSer_PreviewRotation.Get(1);
00238 _ZAxis = m_pManager->mSer_PreviewRotation.Get(2);
00239 };
00240
00241 virtual const BaseType *GetFocusedObjectPointer() const
00242 { return 0L;
00243 };
00244
00245 virtual unsigned int GetDrawPreferenceFlag() const
00246 {
00247 return 0L;
00248 };
00249
00250 virtual double GetPreviewStartTime() const
00251 {
00252 return m_pManager->mSer_PreviewStartTime.Get();
00253 };
00254
00255 virtual double GetPreviewEndTime() const
00256 {
00257 return m_pManager->mSer_PreviewEndTime.Get();
00258 };
00259
00260
00261
00262
00263
00264 inline void SetPreviewStartTime(float _timeSec){ m_pManager->mSer_PreviewStartTime.Set( _timeSec );};
00265
00266
00267
00268
00269 inline float GetPreviewStartTime(){ return m_pManager->mSer_PreviewStartTime.Get(); };
00270
00271
00272
00273
00274 inline void SetPreviewEndTime(float _timeSec){ m_pManager->mSer_PreviewEndTime.Set(_timeSec); };
00275
00276
00277
00278
00279 inline float GetPreviewEndTime(){ return m_pManager->mSer_PreviewEndTime.Get(); };
00280
00281
00282
00283
00284
00285
00286 inline void SetPreviewCurrentTime(float _timeSec){ m_pManager->mSer_PreviewCurrentTime.Set(_timeSec); };
00287
00288
00289
00290
00291
00292
00293 inline float GetPreviewCurrentTime(){ return m_pManager->mSer_PreviewCurrentTime.Get(); };
00294
00295
00296
00297
00298 inline void SetPlaySpeed(float _speedRate){ m_pManager->mSer_PlaySpeed.Set( _speedRate ); };
00299
00300
00301
00302
00303 inline float GetPlaySpeed(){ return m_pManager->mSer_PlaySpeed.Get(); };
00304
00305
00306
00307
00308 inline void SetPlayState(bool _isPlaying){ if(_isPlaying)m_pManager->mSer_Flag.AddFlags(m_PF_PlayState);
00309 else m_pManager->mSer_Flag.RemoveFlags(m_PF_PlayState); };
00310
00311
00312
00313
00314 inline bool GetPlayState(){ return m_pManager->mSer_Flag.TestFlags(m_PF_PlayState); };
00315
00316 };
00317 InterfacePreviewConfiguration m_PreviewConfiguration;
00318 #endif
00319 };
00320
00321
00322
00323
00324 static BaseType *NewPreviewEdited(){ return new PreviewEdited(); };
00325
00326
00327
00328
00329 static BaseType *NewPreviewIndexList(){ return new PackList(NewPreviewEdited); };
00330 #ifdef _ENGINE_EDITABLE_
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340 void SetContextPreviewObject(BaseObject *_ObjectToPreview,unsigned int _RenderViewIndex=0);
00341 #endif
00342 #ifdef _ENGINE_EDITABLE_
00343
00344
00345
00346
00347
00348
00349
00350 BaseObject *GetContextPreviewObject(unsigned int _RenderViewIndex=0,InterfacePrefObject::PreviewEdited::InterfacePreviewConfiguration **_ppPreviewConfiguration=0L);
00351 #endif
00352 #ifdef _ENGINE_EDITABLE_
00353
00354
00355
00356
00357 void PreviewPrevious(unsigned int _RenderViewIndex=0);
00358 #endif
00359 #ifdef _ENGINE_EDITABLE_
00360
00361
00362
00363
00364 void PreviewNext(unsigned int _RenderViewIndex=0);
00365 #endif
00366
00367
00368
00369 class Edited : public PackStruct
00370 {
00371 public:
00372
00373 PackObjectReferenceSpecial mSer_Reference;
00374
00375 PackULong_Flags mSer_Flag;
00376
00377
00378 static const unsigned int m_EF_HistoryFlag=1;
00379
00380 static const unsigned int m_EF_SelfReference=2;
00381 Edited(void) : PackStruct()
00382 {
00383 REGISTER_MEMBER_REFERENCE(mSer_Reference ,0L, BaseObject::m_Description );
00384
00385 REGISTER_MEMBER( mSer_Flag,0L);
00386 };
00387 };
00388
00389
00390
00391
00392 static BaseType *NewEdited(){ return new Edited(); };
00393
00394
00395
00396
00397
00398 static BaseType *NewEditorIndexList(){ return new PackList(NewEdited); };
00399 #ifdef _ENGINE_EDITABLE_
00400
00401
00402
00403
00404 inline void SetSoundMainVolume(float _volume){ mSer_SoundMachineMainVolume.Set(_volume); };
00405 #endif
00406 #ifdef _ENGINE_EDITABLE_
00407
00408
00409
00410
00411 inline float GetSoundMainVolume(){ return mSer_SoundMachineMainVolume.Get(); };
00412 #endif
00413 #ifdef _ENGINE_EDITABLE_
00414
00415
00416
00417
00418
00419 inline bool IsActive(){ return (mSer_Flags.Get() & ipof_Active); };
00420 #endif
00421 #ifdef _ENGINE_EDITABLE_
00422
00423
00424
00425
00426 virtual void CloseReferences();
00427 #endif
00428
00429
00430
00431 protected:
00432
00433 static const unsigned int ipof_Active=1;
00434
00435 static const unsigned int ipof_IsPlaying=1<<1;
00436
00437 static const unsigned int ipof_DrawPathAsLines=1<<2;
00438
00439 bool m_isBeingDestroyed;
00440
00441
00442 PackULong_Flags_Activate mSer_Flags;
00443
00444
00445
00446 PackULong_Enums mSer_PreviewShapeConfiguration;
00447
00448 PackList mSer_PreviewIndexList;
00449
00450
00451 PackULong_Enums mSer_ObjectEditorShapeConfiguration;
00452
00453 PackList mSer_EditorIndexList;
00454
00455
00456
00457 PackFloatByte_Limits mSer_SoundMachineMainVolume;
00458
00459
00460 #ifdef _ENGINE_EDITABLE_
00461
00462
00463
00464
00465
00466 PackList *GetOrCreatePreviewIndexList( unsigned int _RenderViewIndex=0);
00467 #endif
00468 #ifdef _ENGINE_EDITABLE_
00469
00470
00471
00472
00473
00474 PackList *GetOrCreateEditorIndexList( unsigned int _RenderViewIndex=0);
00475 #endif
00476 #ifdef _ENGINE_EDITABLE_
00477
00478
00479
00480 void PurgePreferenceToDeadObjects();
00481 #endif
00482 };
00483
00484
00485 #endif