2018-04-02 23:01:38 +08:00
|
|
|
|
#pragma once
|
2018-04-21 21:24:46 +08:00
|
|
|
|
#include "e2dbase.h"
|
2018-04-02 23:01:38 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace e2d
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ColliderManager;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ײ<EFBFBD><D7B2>
|
|
|
|
|
|
class Collider :
|
|
|
|
|
|
public Object
|
|
|
|
|
|
{
|
|
|
|
|
|
friend ColliderManager;
|
|
|
|
|
|
friend Node;
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
Collider();
|
|
|
|
|
|
|
|
|
|
|
|
virtual ~Collider();
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><D7B2><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>ϵ
|
2018-04-24 21:22:34 +08:00
|
|
|
|
virtual Relation getRelationWith(
|
2018-04-02 23:01:38 +08:00
|
|
|
|
Collider * pCollider
|
|
|
|
|
|
) const;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڵ<EFBFBD>
|
|
|
|
|
|
Node * getParentNode() const;
|
|
|
|
|
|
|
2018-04-22 13:15:57 +08:00
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
|
|
|
|
|
Color getColor() const;
|
|
|
|
|
|
|
2018-04-02 23:01:38 +08:00
|
|
|
|
// <20><><EFBFBD>û<EFBFBD><C3BB>رո<D8B1><D5B8><EFBFBD>ײ<EFBFBD><D7B2>
|
|
|
|
|
|
virtual void setEnable(
|
2018-05-07 15:48:06 +08:00
|
|
|
|
bool enable
|
2018-04-02 23:01:38 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><D7B2><EFBFBD>Ŀɼ<C4BF><C9BC><EFBFBD>
|
|
|
|
|
|
void setVisiable(
|
|
|
|
|
|
bool bVisiable
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ɫ
|
|
|
|
|
|
void setColor(
|
2018-04-22 13:15:57 +08:00
|
|
|
|
Color color
|
2018-04-02 23:01:38 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ô<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
|
|
|
|
|
|
void setAutoResize(
|
2018-05-07 15:48:06 +08:00
|
|
|
|
bool enable
|
2018-04-02 23:01:38 +08:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ ID2D1Geometry <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
virtual ID2D1Geometry * getD2dGeometry() const = 0;
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// ת<><D7AA><EFBFBD><EFBFBD>ײ<EFBFBD><D7B2>
|
|
|
|
|
|
virtual void _transform();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
|
|
|
|
|
virtual void _resize() = 0;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>Ⱦ<EFBFBD><C8BE>ײ<EFBFBD><D7B2>
|
|
|
|
|
|
virtual void _render();
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
2018-05-09 00:34:15 +08:00
|
|
|
|
bool _enable;
|
|
|
|
|
|
bool _visiable;
|
|
|
|
|
|
bool _autoResize;
|
|
|
|
|
|
Color _color;
|
|
|
|
|
|
Node * _parentNode;
|
|
|
|
|
|
ID2D1TransformedGeometry * _transformed;
|
2018-04-02 23:01:38 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
class ColliderRect :
|
|
|
|
|
|
public Collider
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ĭ<EFBFBD>Ͼ<EFBFBD><CFBE><EFBFBD>
|
|
|
|
|
|
ColliderRect();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
ColliderRect(
|
|
|
|
|
|
double x,
|
|
|
|
|
|
double y,
|
|
|
|
|
|
double width,
|
|
|
|
|
|
double height
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ͽڵ<CDBD>λ<EFBFBD>ô<EFBFBD>С<EFBFBD><D0A1>ͬ<EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
|
|
|
|
|
ColliderRect(
|
|
|
|
|
|
Node * node
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
virtual ~ColliderRect();
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ľ<DEB8><C4BE>δ<EFBFBD>С
|
|
|
|
|
|
void setRect(
|
|
|
|
|
|
double left,
|
|
|
|
|
|
double top,
|
|
|
|
|
|
double right,
|
|
|
|
|
|
double bottom
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ ID2D1Geometry <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
virtual ID2D1RectangleGeometry * getD2dGeometry() const override;
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
|
|
|
|
|
virtual void _resize();
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
2018-05-09 00:34:15 +08:00
|
|
|
|
ID2D1RectangleGeometry * _d2dRectangle;
|
2018-04-02 23:01:38 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Բ<><D4B2>
|
|
|
|
|
|
class ColliderCircle :
|
|
|
|
|
|
public Collider
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ĭ<EFBFBD><C4AC>Բ<EFBFBD><D4B2>
|
|
|
|
|
|
ColliderCircle();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>Բ<EFBFBD>ĺͰ뾶<CDB0><EBBEB6><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2>
|
|
|
|
|
|
ColliderCircle(
|
|
|
|
|
|
Point center,
|
|
|
|
|
|
double radius
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ͽڵ<CDBD>λ<EFBFBD>ô<EFBFBD>С<EFBFBD><D0A1>ͬ<EFBFBD><CDAC>Բ<EFBFBD><D4B2>
|
|
|
|
|
|
ColliderCircle(
|
|
|
|
|
|
Node * node
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
virtual ~ColliderCircle();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><EFBFBD>Բ<EFBFBD>δ<EFBFBD>С
|
|
|
|
|
|
void setCircle(
|
|
|
|
|
|
Point center,
|
|
|
|
|
|
double radius
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ ID2D1Geometry <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
virtual ID2D1EllipseGeometry * getD2dGeometry() const override;
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
|
|
|
|
|
virtual void _resize();
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
2018-05-09 00:34:15 +08:00
|
|
|
|
ID2D1EllipseGeometry * _d2dCircle;
|
2018-04-02 23:01:38 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>Բ<EFBFBD><D4B2>
|
|
|
|
|
|
class ColliderEllipse :
|
|
|
|
|
|
public Collider
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD>Բ
|
|
|
|
|
|
ColliderEllipse();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>Բ<EFBFBD>ĺͰ뾶<CDB0><EBBEB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ
|
|
|
|
|
|
ColliderEllipse(
|
|
|
|
|
|
Point center,
|
|
|
|
|
|
double radiusX,
|
|
|
|
|
|
double radiusY
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ͽڵ<CDBD>λ<EFBFBD>ô<EFBFBD>С<EFBFBD><D0A1>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>Բ
|
|
|
|
|
|
ColliderEllipse(
|
|
|
|
|
|
Node * node
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
virtual ~ColliderEllipse();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><EFBFBD><DEB8><EFBFBD>Բ<EFBFBD><D4B2>С
|
|
|
|
|
|
void setEllipse(
|
|
|
|
|
|
Point center,
|
|
|
|
|
|
double radiusX,
|
|
|
|
|
|
double radiusY
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ ID2D1Geometry <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
virtual ID2D1EllipseGeometry * getD2dGeometry() const override;
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
|
|
|
|
|
|
virtual void _resize();
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
2018-05-09 00:34:15 +08:00
|
|
|
|
ID2D1EllipseGeometry * _d2dEllipse;
|
2018-04-02 23:01:38 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
}
|