mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-13 03:28:19 +00:00
38f1db1c4f
* Player go through a Checkpoint tile (29 in tele layer) * He fall in a Check-Teleporter tile (31 in tele layer) * Player is teleported to the check-TO (30 in tele layer) that have the same number as the last Checkpoint. Thus players are teleported to the last checkpoint he passed, regardless of whether he made the map in the right direction or not. Tele tileset may need some improvement. Closes Pull Request #52
121 lines
3.4 KiB
C++
121 lines
3.4 KiB
C++
/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
|
|
/* If you are missing that file, acquire a complete release at teeworlds.com. */
|
|
#ifndef GAME_COLLISION_H
|
|
#define GAME_COLLISION_H
|
|
|
|
#include <base/vmath.h>
|
|
|
|
#include <list>
|
|
|
|
class CCollision
|
|
{
|
|
class CTile *m_pTiles;
|
|
int m_Width;
|
|
int m_Height;
|
|
class CLayers *m_pLayers;
|
|
|
|
//bool IsTileSolid(int x, int y);
|
|
//int GetTile(int x, int y);
|
|
|
|
public:
|
|
enum
|
|
{
|
|
COLFLAG_SOLID=1,
|
|
COLFLAG_DEATH=2,
|
|
COLFLAG_NOHOOK=4,
|
|
// DDRace
|
|
COLFLAG_NOLASER=8,
|
|
COLFLAG_THROUGH=16
|
|
};
|
|
|
|
CCollision();
|
|
void Init(class CLayers *pLayers);
|
|
bool CheckPoint(float x, float y) { return IsSolid(round(x), round(y)); }
|
|
bool CheckPoint(vec2 Pos) { return CheckPoint(Pos.x, Pos.y); }
|
|
int GetCollisionAt(float x, float y) { return GetTile(round(x), round(y)); }
|
|
int GetWidth() { return m_Width; };
|
|
int GetHeight() { return m_Height; };
|
|
int IntersectLine(vec2 Pos0, vec2 Pos1, vec2 *pOutCollision, vec2 *pOutBeforeCollision, bool AllowThrough);
|
|
void MovePoint(vec2 *pInoutPos, vec2 *pInoutVel, float Elasticity, int *pBounces);
|
|
void MoveBox(vec2 *pInoutPos, vec2 *pInoutVel, vec2 Size, float Elasticity);
|
|
bool TestBox(vec2 Pos, vec2 Size);
|
|
|
|
// DDRace
|
|
|
|
void Dest();
|
|
void SetCollisionAt(float x, float y, int Flag);
|
|
void SetDTile(float x, float y, bool State);
|
|
void SetDCollisionAt(float x, float y, int Type, int Flags, int Number);
|
|
int GetDTileIndex(int Index);
|
|
int GetDTileFlags(int Index);
|
|
int GetDTileNumber(int Index);
|
|
int GetFCollisionAt(float x, float y) { return GetFTile(round(x), round(y)); }
|
|
int IntersectNoLaser(vec2 Pos0, vec2 Pos1, vec2 *pOutCollision, vec2 *pOutBeforeCollision);
|
|
int IntersectNoLaserNW(vec2 Pos0, vec2 Pos1, vec2 *pOutCollision, vec2 *pOutBeforeCollision);
|
|
int IntersectAir(vec2 Pos0, vec2 Pos1, vec2 *pOutCollision, vec2 *pOutBeforeCollision);
|
|
int GetIndex(int x, int y);
|
|
int GetFIndex(int x, int y);
|
|
|
|
int GetTile(int x, int y);
|
|
int GetFTile(int x, int y);
|
|
int Entity(int x, int y, int Layer);
|
|
int GetPureMapIndex(vec2 Pos);
|
|
std::list<int> GetMapIndices(vec2 PrevPos, vec2 Pos, unsigned MaxIndices = 0);
|
|
int GetMapIndex(vec2 Pos);
|
|
bool TileExists(int Index);
|
|
bool TileExistsNext(int Index);
|
|
vec2 GetPos(int Index);
|
|
int GetTileIndex(int Index);
|
|
int GetFTileIndex(int Index);
|
|
int GetTileFlags(int Index);
|
|
int GetFTileFlags(int Index);
|
|
int IsTeleport(int Index);
|
|
int IsEvilTeleport(int Index);
|
|
int IsCheckTeleport(int Index);
|
|
int IsTCheckpoint(int Index);
|
|
//int IsCheckpoint(int Index);
|
|
int IsSpeedup(int Index);
|
|
void GetSpeedup(int Index, vec2 *Dir, int *Force, int *MaxSpeed);
|
|
int IsSwitch(int Index);
|
|
int GetSwitchNumber(int Index);
|
|
int GetSwitchDelay(int Index);
|
|
|
|
int IsSolid(int x, int y);
|
|
int IsThrough(int x, int y);
|
|
int IsNoLaser(int x, int y);
|
|
int IsFNoLaser(int x, int y);
|
|
|
|
int IsCheckpoint(int Index);
|
|
int IsFCheckpoint(int Index);
|
|
|
|
int IsMover(int x, int y, int* Flags);
|
|
|
|
vec2 CpSpeed(int index, int Flags = 0);
|
|
|
|
class CTeleTile *TeleLayer() { return m_pTele; }
|
|
class CSwitchTile *SwitchLayer() { return m_pSwitch; }
|
|
class CLayers *Layers() { return m_pLayers; }
|
|
int m_NumSwitchers;
|
|
|
|
private:
|
|
|
|
class CTeleTile *m_pTele;
|
|
class CSpeedupTile *m_pSpeedup;
|
|
class CTile *m_pFront;
|
|
class CSwitchTile *m_pSwitch;
|
|
class CDoorTile *m_pDoor;
|
|
struct SSwitchers
|
|
{
|
|
bool m_Status[16];
|
|
int m_EndTick[16];
|
|
int m_Type[16];
|
|
};
|
|
|
|
public:
|
|
|
|
SSwitchers* m_pSwitchers;
|
|
};
|
|
|
|
void ThroughOffset(vec2 Pos0, vec2 Pos1, int *Ox, int *Oy);
|
|
#endif
|