Starting to fix Doors

hitted is not a word :p
forgot to change from bool to int
Signed-off-by: GreYFoXGTi <GreYFoXGTi@GMaiL.CoM>
This commit is contained in:
GreYFoXGTi 2010-09-10 08:55:04 +02:00
parent 545171fe91
commit 427fedb79b
8 changed files with 57 additions and 22 deletions

View file

@ -113,7 +113,7 @@ public:
int m_FreezeTime;
int m_FreezeTick;
bool m_Doored;
int m_Doored;
vec2 m_OldPos;
vec2 m_OlderPos;
@ -188,7 +188,7 @@ public:
STOPPED_BOTTOM=4,
STOPPED_TOP=8
};
vec2 m_Intersection;
bool m_EyeEmote;
// info for dead reckoning
int m_ReckoningTick; // tick that we are performing dead reckoning From

View file

@ -35,17 +35,28 @@ void CDoor::Close(int Team)
bool CDoor::HitCharacter(int Team)
{
vec2 At;
std::list < CCharacter * > hittedCharacters = GameServer()->m_World.IntersectedCharacters(m_Pos, m_To, 1.f, At, 0);
if(hittedCharacters.empty()) return false;
for(std::list < CCharacter * >::iterator i = hittedCharacters.begin(); i != hittedCharacters.end(); i++) {
std::list < CCharacter * > HitCharacters = GameServer()->m_World.IntersectedCharacters(m_Pos, m_To, 1.f, 0);
if(HitCharacters.empty()) return false;
for(std::list < CCharacter * >::iterator i = HitCharacters.begin(); i != HitCharacters.end(); i++)
{
CCharacter * Char = *i;
if(Char->Team() == Team)
{
//DoDoored(Char);
Char->m_Doored = true;
}
}
return true;
}
bool CDoor::DoDoored(CCharacter* pChar)
{
vec2 Pos = closest_point_on_line(m_Pos,m_To,pChar->m_Intersection);
return true;
}
void CDoor::Reset()
{
for (int i = 0; i < MAX_CLIENTS; ++i) {

View file

@ -11,7 +11,22 @@ class CDoor : public CEntity
int m_EvalTick[MAX_CLIENTS];
bool m_Opened[MAX_CLIENTS];
bool HitCharacter(int Team);
enum
{
DOORED_R = 1,
DOORED_L = 2,
DOORED_T = 4,
DOORED_B = 8
};
enum
{
DOOR_VER = 1,/*LIKE '|' */
DOOR_HOR = 2,/*LIKE '--' */
DOOR_DIAGBACK = 4,/*LIKE '\' */
DOOR_DIAGFORW = 8 /*LIKE '/' *///xD
};
bool DoDoored(CCharacter* pChar);
int m_Angle;
public:
void Open(int Tick, bool ActivatedTeam[]);

View file

@ -27,10 +27,9 @@ CLight::CLight(CGameWorld *pGameWorld, vec2 Pos, float Rotation, int Length)
bool CLight::HitCharacter()
{
vec2 nothing;
std::list < CCharacter * > hittedCharacters = GameServer()->m_World.IntersectedCharacters(m_Pos, m_To, 0.0f, nothing, 0);
if(hittedCharacters.empty()) return false;
for(std::list < CCharacter * >::iterator i = hittedCharacters.begin(); i != hittedCharacters.end(); i++) {
std::list < CCharacter * > HitCharacters = GameServer()->m_World.IntersectedCharacters(m_Pos, m_To, 0.0f, 0);
if(HitCharacters.empty()) return false;
for(std::list < CCharacter * >::iterator i = HitCharacters.begin(); i != HitCharacters.end(); i++) {
CCharacter * Char = *i;
Char->Freeze(Server()->TickSpeed()*3);
}

View file

@ -34,7 +34,7 @@ bool CPlasma::HitCharacter()
return false;
if(Hit->Team() != m_ResponsibleTeam) return false;
if(m_Freeze == -1) //TODO: bool m_Freeze; need to fix this is unsafe
if(m_Freeze == -1)
Hit->UnFreeze();
else if (m_Freeze)
Hit->Freeze(Server()->TickSpeed()*3);

View file

@ -14,7 +14,7 @@ class CPlasma : public CEntity
int m_LifeTime;
int m_ResponsibleTeam;
bool m_Freeze;
int m_Freeze;
bool m_Explosive;
bool HitCharacter();

View file

@ -224,11 +224,10 @@ CCharacter *CGameWorld::ClosestCharacter(vec2 Pos, float Radius, CEntity *pNotTh
return pClosest;
}
std::list<class CCharacter *> CGameWorld::IntersectedCharacters(vec2 Pos0, vec2 Pos1, float Radius, vec2 &NewPos, class CEntity *pNotThis)
std::list<class CCharacter *> CGameWorld::IntersectedCharacters(vec2 Pos0, vec2 Pos1, float Radius, class CEntity *pNotThis)
{
std::list< CCharacter * > listOfChars;
// Find other players
float ClosestLen = distance(Pos0, Pos1) * 100.0f;
vec2 LineDir = normalize(Pos1-Pos0);
CCharacter *p = (CCharacter *)FindFirst(NETOBJTYPE_CHARACTER);
@ -241,15 +240,10 @@ std::list<class CCharacter *> CGameWorld::IntersectedCharacters(vec2 Pos0, vec2
float Len = distance(p->m_Pos, IntersectPos);
if(Len < p->m_ProximityRadius+Radius)
{
if(Len < ClosestLen)
{
NewPos = IntersectPos;
ClosestLen = Len;
listOfChars.push_back(p);
}
p->m_Intersection = IntersectPos;
listOfChars.push_back(p);
}
}
return listOfChars;
}

View file

@ -142,6 +142,22 @@ public:
std::list<class CCharacter *> IntersectedCharacters(vec2 Pos0, vec2 Pos1, float Radius, vec2 &NewPos, class CEntity *pNotThis);
void ReleaseHooked(int ClientId);
/*
Function: interserct_CCharacters
Finds all CCharacters that intersect the line.
Arguments:
pos0 - Start position
pos2 - End position
radius - How for from the line the CCharacter is allowed to be.
new_pos - Intersection position
notthis - Entity to ignore intersecting with
Returns:
Returns list with all Characters on line.
*/
std::list<class CCharacter *> IntersectedCharacters(vec2 Pos0, vec2 Pos1, float Radius, class CEntity *pNotThis = 0);
};
#endif