00001 #ifndef _Entity2D_H_
00002 #define _Entity2D_H_
00003
00004 #include "Entity.h"
00005 #include "Defines.h"
00006 #include "renderer.h"
00007 #include "MathUtil.h"
00008 #include "ScriptMgr.h"
00009
00010 #if _MSC_VER > 1000
00011 #pragma once
00012 #endif // _MSC_VER > 1000
00013
00014 namespace zak {
00015
00016
00021 class ZAKENGINE_API Entity2D : public ENTITY
00022 {
00023 public:
00024 enum CollisionType {
00025 eCollisionBBox=1,
00026 eCollisionCircle=2
00027 };
00028
00029
00030 protected:
00031 CollisionType _collisionType;
00032 float _collisionRadius;
00033
00034
00035 float _fWidth;
00036 float _fHeight;
00037 float _fPosX;
00038 float _fPosY;
00039 float _fPreviousPosX;
00040 float _fPreviousPosY;
00041 float _fAngleZ;
00042 float _scale;
00043 float _scaleX;
00044 float _scaleY;
00045 float _pivotPosX;
00046 float _pivotPosY;
00047
00048 int _iCollisionGroup;
00049 float _fCollisionRelPosX;
00050 float _fCollisionRelPosY;
00051 float _fCollisionPosX;
00052 float _fCollisionPosY;
00053 float _fCollisionSizeX;
00054 float _fCollisionSizeY;
00055
00056 bool _bMoving;
00057 bool _rotating;
00058 bool _bCheckCollision;
00059 float _fMovingSpeed;
00060 float _fMovingDegrees;
00061 float _rotationSpeed;
00062
00063 int _flipH;
00064 int _flipV;
00065 int _lastFlipHState;
00066 int _lastFlipVState;
00067
00068 float _cosDegree;
00069 float _sinDegree;
00070
00071 bool _bCollisionVisible;
00072 ColorVertex _VertexColor[17];
00073 DWORD _collisionColor;
00074
00075 friend class Renderer;
00076
00077 public:
00082 void SetCollisionColor(DWORD color) { _collisionColor = color; }
00083
00088 void SetCollisionRadius(float radius) {
00089 _collisionRadius = radius;
00090 }
00091
00096 float GetCollisionRadius() {
00097 return _collisionRadius;
00098 }
00099
00104 void SetCollisionGroup(int iColGroup){
00105 _iCollisionGroup=iColGroup;
00106 }
00107
00112 int GetCollsionGroup(void){
00113 return _iCollisionGroup;
00114 }
00115
00120 void SetCheckCollision(bool bCheckCollision){
00121 _bCheckCollision=bCheckCollision;
00122 }
00123
00128 bool GetCheckCollision(){
00129 return _bCheckCollision;
00130 }
00131
00140 void SetRotating(bool rotating){
00141 _rotating=rotating;
00142 }
00143
00149 bool GetRotating(){
00150 return _rotating;
00151 }
00152
00163 void SetMoving(bool bMoving){
00164 _bMoving=bMoving;
00165 }
00166
00172 bool GetMoving(){
00173 return _bMoving;
00174 }
00175
00182 void SetRotationSpeed(float speed){
00183 _rotationSpeed=speed;
00184 }
00185
00193 float GetRotationSpeed(){
00194 return _rotationSpeed;
00195 }
00196
00203 void SetSpeed(float speed){
00204 _fMovingSpeed=speed;
00205 }
00206
00214 float GetSpeed(){
00215 return _fMovingSpeed;
00216 }
00217
00225 void SetMovDirection(float direction){
00226 _fMovingDegrees=direction;
00227
00228 MathUtil::SinCos(_fMovingDegrees,&_sinDegree, &_cosDegree);
00229 }
00230
00238 float GetMovDirection(){
00239 return _fMovingDegrees;
00240 }
00241
00246 void SetPosX(float posX) {
00247 _fPreviousPosX = _fPosX;
00248 _fPreviousPosY = _fPosY;
00249 _fPosX = posX;
00250 _fCollisionPosX=_fCollisionRelPosX+_fPosX;
00251 }
00252
00257 void SetPosY(float posY) {
00258 _fPreviousPosX = _fPosX;
00259 _fPreviousPosY = _fPosY;
00260 _fPosY = posY;
00261 _fCollisionPosY=_fCollisionRelPosY+_fPosY;
00262 }
00263
00269 void SetPos(float fPosx, float fPosy) {
00270 _fPreviousPosX = _fPosX;
00271 _fPreviousPosY = _fPosY;
00272 _fPosX = fPosx;
00273 _fPosY = fPosy;
00274 _fCollisionPosX=_fCollisionRelPosX+_fPosX;
00275 _fCollisionPosY=_fCollisionRelPosY+_fPosY;
00276 }
00277
00283 void GetPos(float &fPosx, float &fPosy) {
00284 fPosx = _fPosX;
00285 fPosy = _fPosY;
00286 }
00287
00292 float GetPosX() {
00293 return _fPosX;
00294 }
00295
00300 float GetPosY() {
00301 return _fPosY;
00302 }
00303
00307 void SetToPreviousPosition() {
00308 _fPosX = _fPreviousPosX;
00309 _fPosY = _fPreviousPosY;
00310 }
00311
00317 void GetPreviousPos(float &fPosx, float &fPosy) {
00318 fPosx = _fPreviousPosX;
00319 fPosy = _fPreviousPosY;
00320 }
00321
00326 float GetPreviousPosX() {
00327 return _fPreviousPosX;
00328 }
00329
00334 float GetPreviousPosY() {
00335 return _fPreviousPosY;
00336 }
00337
00342 CollisionType GetCollisionType() {
00343 return _collisionType;
00344 }
00345
00350 void SetCollisionType(int collisionType) {
00351 _collisionType = (CollisionType)collisionType;
00352 }
00353
00359 void SetCollisionPos(float fPosx, float fPosy) {
00360 _fCollisionRelPosX = fPosx;
00361 _fCollisionRelPosY = fPosy;
00362 _fCollisionPosX = fPosx;
00363 _fCollisionPosY = fPosy;
00364 _fCollisionPosX+=_fPosX;
00365 _fCollisionPosY+=_fPosY;
00366 }
00367
00373 void GetCollisionPos(float &fPosx, float &fPosy) {
00374 fPosx = _fCollisionPosX;
00375 fPosy = _fCollisionPosY;
00376 }
00377
00383 void SetCollisionSize(float fSizeX, float fSizeY) {
00384 _fCollisionSizeX = fSizeX;
00385 _fCollisionSizeY = fSizeY;
00386 }
00387
00393 void GetCollisionSize(float &fSizeX, float &fSizeY) {
00394 fSizeX = _fCollisionSizeX;
00395 fSizeY = _fCollisionSizeY;
00396 }
00397
00402 float GetCollisionWidth() {
00403 return _fCollisionSizeX;
00404 }
00405
00410 float GetCollisionHeight() {
00411 return _fCollisionSizeY;
00412 }
00413
00419 void SetCollisionVisible(bool bCollisionVisible) {
00420 _bCollisionVisible = bCollisionVisible;
00421 }
00422
00427 void SetAngleZ (float fAngleZ) {
00428 _fAngleZ = fAngleZ;
00429
00430 if (_fAngleZ < 0) {
00431 _fAngleZ += 360.0f*(float)(((int)(-_fAngleZ)/360)+1);
00432 } else if (_fAngleZ >= 360) {
00433 _fAngleZ -= 360.0f*(float)(((int)(_fAngleZ)/360));
00434 }
00435 }
00436
00441 float GetAngleZ () {
00442 return _fAngleZ;
00443 }
00444
00450 void SetDim(float w, float h)
00451 {
00452 _fWidth = w;
00453 _fHeight = h;
00454 };
00455
00461 void GetDim(float &w, float &h)
00462 {
00463 w = _fWidth;
00464 h = _fHeight;
00465 };
00466
00471 void SetWidth(float w)
00472 {
00473 _fWidth = w;
00474 };
00475
00480 void SetHeight(float h)
00481 {
00482 _fHeight = h;
00483 };
00484
00489 float GetWidth()
00490 {
00491 return _fWidth;
00492 };
00493
00498 float GetHeight()
00499 {
00500 return _fHeight;
00501 };
00502
00508 void SetScale(float x, float y) {
00509 _scaleX = x;
00510 _scaleY = y;
00511 _scale = x;
00512 }
00513
00518 float GetScale() {
00519 return _scale;
00520 }
00521
00526 void SetScale(float scale) {
00527 _scale = scale;
00528 _scaleX = scale;
00529 _scaleY = scale;
00530 }
00531
00536 void SetScaleX(float x) {
00537 _scaleX = x;
00538 _scale = x;
00539 }
00540
00545 void SetScaleY(float y) {
00546 _scaleY = y;
00547 _scale = y;
00548 }
00549
00554 float GetScaleX() {
00555 return _scaleX;
00556 }
00557
00562 float GetScaleY() {
00563 return _scaleY;
00564 }
00565
00569 void FlipHorizontal() {
00570 _flipH *= -1;
00571 }
00572
00576 void FlipVertical() {
00577 _flipV *= -1;
00578 }
00579
00584 bool GetFlipHorizontal() { return (_flipH == -1); }
00585
00590 bool GetFlipVertical() { return (_flipV == -1); }
00591
00597 void SetPivotPos(float x, float y) {
00598 _pivotPosX = x;
00599 _pivotPosY = y;
00600 }
00601
00606 void SetPivotPosX(float x) {
00607 _pivotPosX = x;
00608 }
00609
00614 void SetPivotPosY(float y) {
00615 _pivotPosY = y;
00616 }
00617
00622 float GetPivotPosX() {
00623 return _pivotPosX;
00624 }
00625
00630 float GetPivotPosY() {
00631 return _pivotPosY;
00632 }
00633
00639 void SetRelativePos(float fAngle, float fDistance)
00640 {
00641 _fPosX += fDistance * _cosDegree;
00642
00643 _fPosY += fDistance * _sinDegree;
00644
00645 _fCollisionPosX=_fCollisionRelPosX+_fPosX;
00646 _fCollisionPosY=_fCollisionRelPosY+_fPosY;
00647 }
00648
00653 virtual void Update(float fTimeBetweenFrames) {
00654 _fPreviousPosX = _fPosX;
00655 _fPreviousPosY = _fPosY;
00656
00657 if (_bMoving) {
00658 _fPosX += fTimeBetweenFrames *
00659 _fMovingSpeed *
00660 _cosDegree;
00661
00662 _fPosY += fTimeBetweenFrames *
00663 _fMovingSpeed *
00664 _sinDegree;
00665
00666 _fCollisionPosX=_fPosX + _fCollisionRelPosX * _cosDegree;
00667 _fCollisionPosY=_fPosY + _fCollisionRelPosY * _sinDegree;
00668 }
00669
00670 if (_rotating) {
00671 _fAngleZ += _rotationSpeed*fTimeBetweenFrames;
00672
00673 if (_fAngleZ < 0) {
00674 _fAngleZ += 360.0f*(float)(((int)(-_fAngleZ)/360)+1);
00675 } else if (_fAngleZ >= 360) {
00676 _fAngleZ -= 360.0f*(float)(((int)(_fAngleZ)/360));
00677 }
00678 }
00679 }
00680
00684 virtual void Draw()
00685 {
00686
00687 g_renderer.SetMatrixMode(ZAK_WORLD_MATRIX);
00688 g_renderer.LoadIdentity();
00689
00690 g_renderer.Translate (MathUtil::Round(_fPosX), MathUtil::Round(_fPosY), 1.0f);
00691
00692
00693 g_renderer.RotationZ(MathUtil::Round(_fAngleZ));
00694 g_renderer.Translate (MathUtil::Round(_pivotPosX), MathUtil::Round(_pivotPosY), 1.0f);
00695 g_renderer.Scale(_scaleX, _scaleY);
00696 }
00697
00701 void DrawCollision()
00702 {
00703 g_renderer.SetMatrixMode(ZAK_WORLD_MATRIX);
00704 g_renderer.LoadIdentity();
00705
00706 g_renderer.Translate (_fCollisionPosX+_pivotPosX, _fCollisionPosY+_pivotPosY, 1.0f);
00707
00708 g_renderer.BindTexture(NULL);
00709
00710 switch (_collisionType) {
00711 case eCollisionBBox:
00712
00713 _VertexColor[0].SetVal(-_fCollisionSizeX/2*_scaleX, -_fCollisionSizeY/2*_scaleY, 1.0f,_collisionColor);
00714 _VertexColor[1].SetVal(-_fCollisionSizeX/2*_scaleX, _fCollisionSizeY/2*_scaleY, 1.0f,_collisionColor);
00715 _VertexColor[2].SetVal( _fCollisionSizeX/2*_scaleX, _fCollisionSizeY/2*_scaleY, 1.0f,_collisionColor);
00716 _VertexColor[3].SetVal( _fCollisionSizeX/2*_scaleX, -_fCollisionSizeY/2*_scaleY, 1.0f,_collisionColor);
00717 _VertexColor[4].SetVal(-_fCollisionSizeX/2*_scaleX, -_fCollisionSizeY/2*_scaleY, 1.0f,_collisionColor);
00718
00719
00720 g_renderer.Draw(_VertexColor, ZAK_PRI_LINESTRIP,5);
00721 break;
00722 case eCollisionCircle:
00723 default:
00724 static float cos;
00725 static float sin;
00726 static float co;
00727 static float ca;
00728
00729 for (int i=0; i<16; i++) {
00730 MathUtil::SinCos((360.0f/16.0f)*(float)i, &sin, &cos);
00731 co = _collisionRadius*sin;
00732 ca = _collisionRadius*cos;
00733
00734 _VertexColor[i].SetVal(ca,co, 1.0f,_collisionColor);
00735 }
00736
00737 MathUtil::SinCos(0, &sin, &cos);
00738 co = _collisionRadius*sin;
00739 ca = _collisionRadius*cos;
00740
00741 _VertexColor[16].SetVal(ca,co, 1.0f,_collisionColor);
00742
00743 g_renderer.Draw(_VertexColor, ZAK_PRI_LINESTRIP,17);
00744
00745 break;
00746 }
00747 }
00748
00754 virtual bool IsColliding(Entity2D *pEntity)
00755 {
00756
00757 if (_bCheckCollision && pEntity->GetCheckCollision()) {
00758
00759 float X1, Y1, X2, Y2;
00760 float W, H;
00761 float R;
00762
00763 switch (_collisionType) {
00764 case eCollisionBBox:
00765 if (pEntity->GetCollisionType() == eCollisionCircle) {
00766 float XR, YR, D;
00767
00768 GetCollisionPos(X1, Y1);
00769 GetCollisionSize(W, H);
00770 W *= GetScaleX();
00771 H *= GetScaleY();
00772
00773 X1 += _pivotPosX;
00774 Y1 += _pivotPosY;
00775
00776 pEntity->GetCollisionPos(X2, Y2);
00777 X2 += pEntity->GetPivotPosX();
00778 Y2 += pEntity->GetPivotPosY();
00779
00780 XR = X1-X2;
00781 YR = Y1-Y2;
00782
00783 D = sqrtf(XR*XR+YR*YR);
00784
00785 XR /= D;
00786 YR /= D;
00787
00788 XR *= pEntity->GetCollisionRadius()*pEntity->GetScale();
00789 YR *= pEntity->GetCollisionRadius()*pEntity->GetScale();
00790
00791 XR += X2;
00792 YR += Y2;
00793
00794 if (XR >= X1-W/2 && XR <= X1+W/2 && YR <= Y1+H/2 && YR >= Y1-H/2) {
00795 return true;
00796 }
00797
00798 } else {
00799 pEntity->GetCollisionPos(X1,Y1);
00800 pEntity->GetCollisionSize(W, H);
00801
00802 W *= pEntity->GetScaleX();
00803 H *= pEntity->GetScaleY();
00804
00805 if (((_fCollisionPosX+_pivotPosX-(_fCollisionSizeX/2*_scaleX) < X1-(W/2) && X1-(W/2) < _fCollisionPosX+_pivotPosX + _fCollisionSizeX/2*_scaleX) ||
00806 (X1-(W/2) < _fCollisionPosX+_pivotPosX-(_fCollisionSizeX/2*_scaleX) && _fCollisionPosX+_pivotPosX-(_fCollisionSizeX/2*_scaleX) < X1+W/2)) &&
00807 ((_fCollisionPosY+_pivotPosY-(_fCollisionSizeY/2*_scaleY) < Y1-(H/2) && Y1-(H/2) < _fCollisionPosY+_pivotPosY+_fCollisionSizeY/2*_scaleY) ||
00808 (Y1-(H/2) < _fCollisionPosY+_pivotPosY-(_fCollisionSizeY/2*_scaleY) && _fCollisionPosY+_pivotPosY-(_fCollisionSizeY/2*_scaleY) < Y1 + H/2))) {
00809
00810 return true;
00811 }
00812 }
00813 break;
00814 case eCollisionCircle:
00815 default:
00816 if (pEntity->GetCollisionType() == eCollisionBBox) {
00817 float XR, YR, D;
00818
00819 pEntity->GetCollisionPos(X1, Y1);
00820 pEntity->GetCollisionSize(W, H);
00821 W *= pEntity->GetScaleX();
00822 H *= pEntity->GetScaleY();
00823
00824 X1 += pEntity->GetPivotPosX();
00825 Y1 += pEntity->GetPivotPosY();
00826
00827 GetCollisionPos(X2, Y2);
00828 X2 += GetPivotPosX();
00829 Y2 += GetPivotPosY();
00830
00831 XR = X1-X2;
00832 YR = Y1-Y2;
00833
00834 D = sqrtf(XR*XR+YR*YR);
00835
00836 XR /= D;
00837 YR /= D;
00838
00839 XR *= GetCollisionRadius()*GetScale();
00840 YR *= GetCollisionRadius()*GetScale();
00841
00842 XR += X2;
00843 YR += Y2;
00844
00845 if (XR >= X1-W/2 && XR <= X1+W/2 && YR <= Y1+H/2 && YR >= Y1-H/2) {
00846 return true;
00847 }
00848
00849 } else {
00850 pEntity->GetCollisionPos(X1,Y1);
00851 R = pEntity->GetCollisionRadius();
00852
00853 R *= pEntity->GetScale();
00854
00855 if ((X1- _fCollisionPosX)*(X1- _fCollisionPosX)+(Y1-_fCollisionPosY)*(Y1-_fCollisionPosY) < (R+_collisionRadius*_scale)*(R+_collisionRadius*_scale)) {
00856 return true;
00857 }
00858 }
00859
00860
00861 break;
00862 }
00863 }
00864
00865 return false;
00866 }
00867
00872 virtual void OnCollide(Entity2D *pEntity)
00873 {
00874 }
00875
00876 static bool RegisterEntity2D(char *className=NULL) {
00877 char _className[100];
00878
00879 if (className != NULL) {
00880 strcpy_s(_className, 100, className);
00881 } else {
00882 strcpy_s(_className, 100, "Entity2D");
00883 if (ScriptMgr::RegisterObjectType(_className, 0, 0) < 0)
00884 return false;
00885 }
00886
00887 if (!ENTITY::RegisterEntity(_className))
00888 return false;
00889
00890
00891
00892 if (ScriptMgr::RegisterObjectMethod(_className, "void SetCollisionColor(uint)",asMETHOD(Entity2D, SetCollisionColor),asCALL_THISCALL) < 0)
00893 return false;
00894 if (ScriptMgr::RegisterObjectMethod(_className, "void SetCollisionRadius(float)",asMETHOD(Entity2D, SetCollisionRadius),asCALL_THISCALL) < 0)
00895 return false;
00896 if (ScriptMgr::RegisterObjectMethod(_className, "float GetCollisionRadius()",asMETHOD(Entity2D, GetCollisionRadius),asCALL_THISCALL) < 0)
00897 return false;
00898 if (ScriptMgr::RegisterObjectMethod(_className, "void SetCheckCollision(bool)",asMETHOD(Entity2D, SetCheckCollision),asCALL_THISCALL) < 0)
00899 return false;
00900 if (ScriptMgr::RegisterObjectMethod(_className, "bool GetCheckCollision()",asMETHOD(Entity2D, GetCheckCollision),asCALL_THISCALL) < 0)
00901 return false;
00902 if (ScriptMgr::RegisterObjectMethod(_className, "void SetRotating(bool)",asMETHOD(Entity2D, SetRotating),asCALL_THISCALL) < 0)
00903 return false;
00904 if (ScriptMgr::RegisterObjectMethod(_className, "bool GetRotating()",asMETHOD(Entity2D, GetRotating),asCALL_THISCALL) < 0)
00905 return false;
00906 if (ScriptMgr::RegisterObjectMethod(_className, "void SetMoving(bool)",asMETHOD(Entity2D, SetMoving),asCALL_THISCALL) < 0)
00907 return false;
00908 if (ScriptMgr::RegisterObjectMethod(_className, "bool GetMoving()",asMETHOD(Entity2D, GetMoving),asCALL_THISCALL) < 0)
00909 return false;
00910 if (ScriptMgr::RegisterObjectMethod(_className, "void SetRotationSpeed(float)",asMETHOD(Entity2D, SetRotationSpeed),asCALL_THISCALL) < 0)
00911 return false;
00912 if (ScriptMgr::RegisterObjectMethod(_className, "float GetRotationSpeed()",asMETHOD(Entity2D, GetRotationSpeed),asCALL_THISCALL) < 0)
00913 return false;
00914 if (ScriptMgr::RegisterObjectMethod(_className, "void SetSpeed(float)",asMETHOD(Entity2D, SetSpeed),asCALL_THISCALL) < 0)
00915 return false;
00916 if (ScriptMgr::RegisterObjectMethod(_className, "float GetSpeed()",asMETHOD(Entity2D, GetSpeed),asCALL_THISCALL) < 0)
00917 return false;
00918 if (ScriptMgr::RegisterObjectMethod(_className, "void SetMovDirection(float)",asMETHOD(Entity2D, SetMovDirection),asCALL_THISCALL) < 0)
00919 return false;
00920 if (ScriptMgr::RegisterObjectMethod(_className, "float GetMovDirection()",asMETHOD(Entity2D, GetMovDirection),asCALL_THISCALL) < 0)
00921 return false;
00922 if (ScriptMgr::RegisterObjectMethod(_className, "void SetPosX(float)",asMETHOD(Entity2D, SetPosX),asCALL_THISCALL) < 0)
00923 return false;
00924 if (ScriptMgr::RegisterObjectMethod(_className, "void SetPosY(float)",asMETHOD(Entity2D, SetPosY),asCALL_THISCALL) < 0)
00925 return false;
00926 if (ScriptMgr::RegisterObjectMethod(_className, "void GetPos(float &out, float &out)",asMETHOD(Entity2D, GetPos),asCALL_THISCALL) < 0)
00927 return false;
00928 if (ScriptMgr::RegisterObjectMethod(_className, "void SetPos(float, float)",asMETHOD(Entity2D, SetPos),asCALL_THISCALL) < 0)
00929 return false;
00930 if (ScriptMgr::RegisterObjectMethod(_className, "float GetPosX()",asMETHOD(Entity2D, GetPosX),asCALL_THISCALL) < 0)
00931 return false;
00932 if (ScriptMgr::RegisterObjectMethod(_className, "float GetPosY()",asMETHOD(Entity2D, GetPosY),asCALL_THISCALL) < 0)
00933 return false;
00934 if (ScriptMgr::RegisterObjectMethod(_className, "void SetToPreviousPosition()",asMETHOD(Entity2D, SetToPreviousPosition),asCALL_THISCALL) < 0)
00935 return false;
00936 if (ScriptMgr::RegisterObjectMethod(_className, "void GetPreviousPos(float &out, float &out)",asMETHOD(Entity2D, GetPreviousPos),asCALL_THISCALL) < 0)
00937 return false;
00938 if (ScriptMgr::RegisterObjectMethod(_className, "float GetPreviousPosX()",asMETHOD(Entity2D, GetPreviousPosX),asCALL_THISCALL) < 0)
00939 return false;
00940 if (ScriptMgr::RegisterObjectMethod(_className, "float GetPreviousPosY()",asMETHOD(Entity2D, GetPreviousPosY),asCALL_THISCALL) < 0)
00941 return false;
00942 if (ScriptMgr::RegisterObjectMethod(_className, "void SetCollisionPos(float, float)",asMETHOD(Entity2D, SetCollisionPos),asCALL_THISCALL) < 0)
00943 return false;
00944 if (ScriptMgr::RegisterObjectMethod(_className, "void GetCollisionPos(float &out, float &out)",asMETHOD(Entity2D, GetCollisionPos),asCALL_THISCALL) < 0)
00945 return false;
00946 if (ScriptMgr::RegisterObjectMethod(_className, "void SetCollisionSize(float, float)",asMETHOD(Entity2D, SetCollisionSize),asCALL_THISCALL) < 0)
00947 return false;
00948 if (ScriptMgr::RegisterObjectMethod(_className, "void GetCollisionSize(float &out, float &out)",asMETHOD(Entity2D, GetCollisionSize),asCALL_THISCALL) < 0)
00949 return false;
00950 if (ScriptMgr::RegisterObjectMethod(_className, "float GetCollisionWidth()",asMETHOD(Entity2D, GetCollisionWidth),asCALL_THISCALL) < 0)
00951 return false;
00952 if (ScriptMgr::RegisterObjectMethod(_className, "float GetCollisionHeight()",asMETHOD(Entity2D, GetCollisionHeight),asCALL_THISCALL) < 0)
00953 return false;
00954 if (ScriptMgr::RegisterObjectMethod(_className, "void SetCollisionVisible(bool)",asMETHOD(Entity2D, SetCollisionVisible),asCALL_THISCALL) < 0)
00955 return false;
00956 if (ScriptMgr::RegisterObjectMethod(_className, "void SetAngleZ(float)",asMETHOD(Entity2D, SetAngleZ),asCALL_THISCALL) < 0)
00957 return false;
00958 if (ScriptMgr::RegisterObjectMethod(_className, "float GetAngleZ()",asMETHOD(Entity2D, GetAngleZ),asCALL_THISCALL) < 0)
00959 return false;
00960 if (ScriptMgr::RegisterObjectMethod(_className, "void SetDim(float, float)",asMETHOD(Entity2D, SetDim),asCALL_THISCALL) < 0)
00961 return false;
00962 if (ScriptMgr::RegisterObjectMethod(_className, "void GetDim(float &out, float &out)",asMETHOD(Entity2D, GetDim),asCALL_THISCALL) < 0)
00963 return false;
00964 if (ScriptMgr::RegisterObjectMethod(_className, "void SetWidth(float)",asMETHOD(Entity2D, SetWidth),asCALL_THISCALL) < 0)
00965 return false;
00966 if (ScriptMgr::RegisterObjectMethod(_className, "void SetHeight(float)",asMETHOD(Entity2D, SetHeight),asCALL_THISCALL) < 0)
00967 return false;
00968 if (ScriptMgr::RegisterObjectMethod(_className, "float GetWidth()",asMETHOD(Entity2D, GetWidth),asCALL_THISCALL) < 0)
00969 return false;
00970 if (ScriptMgr::RegisterObjectMethod(_className, "float GetHeight()",asMETHOD(Entity2D, GetHeight),asCALL_THISCALL) < 0)
00971 return false;
00972 if (ScriptMgr::RegisterObjectMethod(_className, "float GetScale()",asMETHOD(Entity2D, GetScale),asCALL_THISCALL) < 0)
00973 return false;
00974 if (ScriptMgr::RegisterObjectMethod(_className, "void SetScaleX(float)",asMETHOD(Entity2D, SetScaleX),asCALL_THISCALL) < 0)
00975 return false;
00976 if (ScriptMgr::RegisterObjectMethod(_className, "void SetScaleY(float)",asMETHOD(Entity2D, SetScaleY),asCALL_THISCALL) < 0)
00977 return false;
00978 if (ScriptMgr::RegisterObjectMethod(_className, "float GetScaleX()",asMETHOD(Entity2D, GetScaleX),asCALL_THISCALL) < 0)
00979 return false;
00980 if (ScriptMgr::RegisterObjectMethod(_className, "float GetScaleY()",asMETHOD(Entity2D, GetScaleY),asCALL_THISCALL) < 0)
00981 return false;
00982 if (ScriptMgr::RegisterObjectMethod(_className, "void FlipHorizontal()",asMETHOD(Entity2D, FlipHorizontal),asCALL_THISCALL) < 0)
00983 return false;
00984 if (ScriptMgr::RegisterObjectMethod(_className, "void FlipVertical()",asMETHOD(Entity2D, FlipVertical),asCALL_THISCALL) < 0)
00985 return false;
00986 if (ScriptMgr::RegisterObjectMethod(_className, "bool GetFlipHorizontal()",asMETHOD(Entity2D, GetFlipHorizontal),asCALL_THISCALL) < 0)
00987 return false;
00988 if (ScriptMgr::RegisterObjectMethod(_className, "bool GetFlipVertical()",asMETHOD(Entity2D, GetFlipVertical),asCALL_THISCALL) < 0)
00989 return false;
00990 if (ScriptMgr::RegisterObjectMethod(_className, "void SetPivotPos(float, float)",asMETHOD(Entity2D, SetPivotPos),asCALL_THISCALL) < 0)
00991 return false;
00992 if (ScriptMgr::RegisterObjectMethod(_className, "void SetPivotPosX(float)",asMETHOD(Entity2D, SetPivotPosX),asCALL_THISCALL) < 0)
00993 return false;
00994 if (ScriptMgr::RegisterObjectMethod(_className, "void SetPivotPosY(float)",asMETHOD(Entity2D, SetPivotPosY),asCALL_THISCALL) < 0)
00995 return false;
00996 if (ScriptMgr::RegisterObjectMethod(_className, "float GetPivotPosX()",asMETHOD(Entity2D, GetPivotPosX),asCALL_THISCALL) < 0)
00997 return false;
00998 if (ScriptMgr::RegisterObjectMethod(_className, "float GetPivotPosY()",asMETHOD(Entity2D, GetPivotPosY),asCALL_THISCALL) < 0)
00999 return false;
01000 if (ScriptMgr::RegisterObjectMethod(_className, "bool IsColliding(Entity2D@+)",asMETHOD(Entity2D, IsColliding),asCALL_THISCALL) < 0)
01001 return false;
01002 if (ScriptMgr::RegisterObjectMethod(_className, "void SetCollisionType(int)",asMETHOD(Entity2D, SetCollisionType),asCALL_THISCALL) < 0)
01003 return false;
01004
01005 return true;
01006 }
01007
01011 Entity2D()
01012 {
01013 _iCollisionGroup=0;
01014 _fPosX = 0;
01015 _fPosY = 0;
01016 _fPreviousPosX = 0;
01017 _fPreviousPosY = 0;
01018 _fCollisionRelPosX = 0;
01019 _fCollisionRelPosY = 0;
01020 _fCollisionPosX = 0;
01021 _fCollisionPosY = 0;
01022 _fCollisionSizeX = 0;
01023 _fCollisionSizeY = 0;
01024 _fWidth = 0;
01025 _fHeight = 0;
01026 _fAngleZ = 0;
01027 _bCheckCollision = false;
01028 _bMoving = false;
01029 _fMovingSpeed = 0;
01030 _fMovingDegrees = 0;
01031 _bCollisionVisible = false;
01032 _rotationSpeed = 0;
01033 _rotating = false;
01034 _scale = 1.0f;
01035 _scaleX = 1.0f;
01036 _scaleY = 1.0f;
01037 _collisionType = eCollisionCircle;
01038 _flipH = 1;
01039 _flipV = 1;
01040 _lastFlipHState = 1;
01041 _lastFlipVState = 1;
01042 _pivotPosX = 0.0f;
01043 _pivotPosY = 0.0f;
01044 _collisionColor = 0xFFFFFFFF;
01045
01046 }
01047
01051 virtual ~Entity2D(){
01052 }
01053
01054 };
01055
01056 }
01057
01058 #endif // _Entity2D_H_