00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __CEL_PF_NEW_CAMERA__
00022 #define __CEL_PF_NEW_CAMERA__
00023
00024 #include "cstypes.h"
00025 #include "iutil/comp.h"
00026 #include "iutil/eventh.h"
00027 #include "csutil/scf.h"
00028 #include "csutil/weakref.h"
00029 #include "csutil/weakrefarr.h"
00030 #include "csutil/refarr.h"
00031 #include "physicallayer/propclas.h"
00032 #include "physicallayer/propfact.h"
00033 #include "physicallayer/facttmpl.h"
00034 #include "celtool/stdpcimp.h"
00035 #include "celtool/stdparams.h"
00036 #include "celtool/camera.h"
00037 #include "propclass/region.h"
00038 #include "propclass/mesh.h"
00039
00040 struct iCelEntity;
00041 struct iObjectRegistry;
00042 struct iGraphics3D;
00043 struct iEngine;
00044 struct iVirtualClock;
00045 struct iKeyboardDriver;
00046 struct iMouseDriver;
00047 struct iCollideSystem;
00048 struct iView;
00049 class csView;
00050 class celPcNewCamera;
00051 class csReversibleTransform;
00052 class csOrthoTransform;
00053 struct iPcZoneManager;
00054
00055 struct iPcNewCamera;
00056
00057 namespace iPcmNewCamera
00058 {
00059 struct General : public virtual iBase
00060 {
00061 SCF_INTERFACE (General, 0, 1, 0);
00062
00067 virtual void SetParentCamera (iPcNewCamera* camera) = 0;
00068
00069 CS_DEPRECATED_METHOD_MSG("Use UseSpringOrigin () instead")
00075 virtual bool UseSpringPos () const = 0;
00076
00082 virtual bool UseSpringOrigin () const = 0;
00083
00089 virtual bool UseSpringTarget () const = 0;
00090
00096 virtual bool UseSpringUp () const = 0;
00097
00098 CS_DEPRECATED_METHOD_MSG("Use GetCollisionDetection () instead")
00104 virtual bool AllowCollisionDetection () const = 0;
00105
00111 virtual bool GetCollisionDetection () const = 0;
00112
00118 virtual bool DrawAttachedMesh () const = 0;
00119
00124 virtual float GetSpringCoefficient () const = 0;
00125
00130 virtual void SetSpringCoefficient (float s) = 0;
00131
00137 virtual void SetOriginSpringCoefficient (float springCoef) = 0;
00138
00143 virtual float GetOriginSpringCoefficient () const = 0;
00144
00150 virtual void SetTargetSpringCoefficient (float springCoef) = 0;
00151
00156 virtual float GetTargetSpringCoefficient () const = 0;
00157
00163 virtual void SetUpSpringCoefficient (float springCoef) = 0;
00164
00169 virtual float GetUpSpringCoefficient () const = 0;
00170
00171 CS_DEPRECATED_METHOD_MSG("Use GetOrigin () instead")
00176 virtual const csVector3& GetPosition () const = 0;
00177
00182 virtual const csVector3& GetOrigin () const = 0;
00183
00188 virtual const csVector3& GetTarget () const = 0;
00189
00194 virtual const csVector3& GetUp () const = 0;
00195
00201 virtual bool DecideCameraState () = 0;
00202 };
00203
00213 struct Tracking : public virtual General
00214 {
00215 SCF_INTERFACE (Tracking, 0, 0, 1);
00216
00221 virtual bool ResetCamera () = 0;
00222
00223 enum TargetState
00224 {
00225 TARGET_BASE = 0,
00226 TARGET_OBJ,
00227 TARGET_NONE
00228 };
00229
00234 virtual bool SetTargetEntity (const char* name) = 0;
00235
00242 virtual void SetTargetState (TargetState targetstate) = 0;
00243
00247 virtual TargetState GetTargetState () = 0;
00248
00253 virtual void SetTargetYOffset (float targetyoffset) = 0;
00254 };
00255 }
00256
00257 typedef iPcmNewCamera::General iCelCameraMode;
00258
00262 struct iPcNewCamera : public virtual iPcCamera
00263 {
00264 SCF_INTERFACE (iPcNewCamera, 0, 1, 0);
00265
00266 CS_DEPRECATED_METHOD_MSG("Use GetBaseOrigin () instead")
00271 virtual const csVector3& GetBasePos () const = 0;
00272
00277 virtual const csVector3& GetBaseOrigin () const = 0;
00278
00283 virtual const csVector3& GetBaseDir () const = 0;
00284
00289 virtual const csVector3& GetBaseUp () const = 0;
00290
00295 virtual const csReversibleTransform& GetBaseTrans () const = 0;
00296
00297 CS_DEPRECATED_METHOD_MSG("Use GetOrigin () instead")
00302 virtual const csVector3& GetPos () const = 0;
00303
00308 virtual const csVector3& GetOrigin () const = 0;
00309
00314 virtual const csVector3& GetTarget () const = 0;
00315
00320 virtual const csVector3& GetUp () const = 0;
00321
00322 CS_DEPRECATED_METHOD_MSG("Use SetTargetPositionOffset () instead")
00328 virtual void SetPositionOffset (const csVector3& offset) = 0;
00329
00336 virtual void SetTargetPositionOffset (const csVector3& offset) = 0;
00337
00341 virtual void SetTargetMinimumOffset (float minoff) = 0;
00342
00349 virtual void SetCameraPositionOffset (const csVector3& offset) = 0;
00350
00356 virtual void SetSpringCoefficient (float springCoef) = 0;
00357
00362 virtual float GetSpringCoefficient () const = 0;
00363
00369 virtual void SetOriginSpringCoefficient (float springCoef) = 0;
00370
00375 virtual float GetOriginSpringCoefficient () const = 0;
00376
00382 virtual void SetTargetSpringCoefficient (float springCoef) = 0;
00383
00388 virtual float GetTargetSpringCoefficient () const = 0;
00389
00395 virtual void SetUpSpringCoefficient (float springCoef) = 0;
00396
00401 virtual float GetUpSpringCoefficient () const = 0;
00402
00403 CS_DEPRECATED_METHOD_MSG("Use GetCollisionDetection () instead")
00409 virtual bool DetectCollisions () const = 0;
00410
00416 virtual void SetCollisionDetection (bool detectCollisions) = 0;
00417
00423 virtual bool GetCollisionDetection () const = 0;
00424
00428 virtual void SetCollisionYFocusOffset (float yoff) = 0;
00429
00433 virtual float GetCollisionYFocusOffset () const = 0;
00434
00443 virtual void SetCollisionCorrection (float corr) = 0;
00444
00448 virtual float GetCollisionCorrection () const = 0;
00449
00455 virtual void SetCollisionAvoidanceRadiusSq (float radsq) = 0;
00456
00460 virtual float GetCollisionAvoidanceRadiusSq () const = 0;
00461
00466 virtual void SetCollisionYAvoidance (float yavoid) = 0;
00467
00471 virtual float GetCollisionYAvoidance () const = 0;
00472
00477 virtual void SetCollisionAvoidanceInterpolation (float aint) = 0;
00478
00482 virtual float GetCollisionAvoidanceInterpolation () const = 0;
00483
00488 CS_DEPRECATED_METHOD_MSG("Non existant. Use the new collision detection system.")
00489 virtual void SetCollisionSpringCoefficient (float springCoef) = 0;
00490
00495 CS_DEPRECATED_METHOD_MSG("Non existant. Use the new collision detection system.")
00496 virtual float GetCollisionSpringCoefficient () const = 0;
00497
00503 virtual bool InCameraTransition () const = 0;
00504
00505 CS_DEPRECATED_METHOD_MSG("Use SetTransitionTime (float) instead.")
00511 virtual void SetTransitionSpringCoefficient (float springCoef) = 0;
00512
00513 CS_DEPRECATED_METHOD_MSG("Use SetTransitionTime (float) instead.")
00519 virtual float GetTransitionSpringCoefficient () const = 0;
00520
00521 CS_DEPRECATED_METHOD_MSG("Use GetTransitionTime () instead.")
00531 virtual void SetTransitionCutoffDistance (float cutOffOriginDist,
00532 float cutOffTargetDist) = 0;
00533
00534 CS_DEPRECATED_METHOD_MSG("Use GetTransitionTime () instead.")
00540 virtual float GetTransitionCutoffPosDistance () const = 0;
00541
00542 CS_DEPRECATED_METHOD_MSG("Use GetTransitionTime () instead.")
00548 virtual float GetTransitionCutoffOriginDistance () const = 0;
00549
00550 CS_DEPRECATED_METHOD_MSG("Use GetTransitionTime () instead.")
00556 virtual float GetTransitionCutoffTargetDistance () const = 0;
00557
00562 virtual void SetTransitionTime (float time) = 0;
00563
00567 virtual float GetTransitionTime () const = 0;
00568
00574 virtual size_t AttachCameraMode (iCelCameraMode* mode) = 0;
00575
00576 enum CEL_CAMERA_MODE
00577 {
00578 CCM_FIRST_PERSON = 0,
00579 CCM_THIRD_PERSON,
00580 CCM_TRACKING,
00581 CCM_HORIZONTAL,
00582 CCM_ISOMETRIC,
00583 CCM_COUNT
00584 };
00585
00591 virtual size_t AttachCameraMode (CEL_CAMERA_MODE modetype) = 0;
00592
00597 virtual size_t GetCurrentCameraModeIndex () const = 0;
00598
00603 virtual iCelCameraMode* GetCurrentCameraMode () = 0;
00604
00610 virtual bool SetCurrentCameraMode (size_t modeIndex) = 0;
00611
00615 virtual void NextCameraMode () = 0;
00616
00620 virtual void PrevCameraMode () = 0;
00621
00625 virtual void Draw () = 0;
00626
00632 virtual const csOrthoTransform &GetTransform () = 0;
00633
00639 virtual iCelCameraMode* GetCameraMode (int idx = -1) = 0;
00640
00648 template <typename T>
00649 csPtr<T> QueryModeInterface (int idx = -1)
00650 {
00651 iBase* cmode = GetCameraMode (idx);
00652 if (!cmode)
00653 return 0;
00654 return scfQueryInterface<T> (cmode);
00655 }
00656
00660 virtual bool Reset () = 0;
00661 };
00662
00663 #endif // __CEL_PF_NEW_CAMERA__