Merge branch 'master' of git://github.com/oy/teeworlds

Conflicts:
	src/game/server/gamecontext.cpp
This commit is contained in:
GreYFoX 2011-06-02 19:13:40 +02:00
commit bee10fda8f
14 changed files with 75 additions and 62 deletions

View file

@ -75,7 +75,7 @@ if gen_client_content_header or gen_server_content_header:
EmitTypeDeclaration(content.__dict__[name])
# the container pointer
print('extern DATACONTAINER *g_pData;')
print('extern CDataContainer *g_pData;')
# enums
EmitEnum(["IMAGE_%s"%i.name.value.upper() for i in content.container.images.items], "NUM_IMAGES")
@ -88,7 +88,7 @@ if gen_client_content_source or gen_server_content_source:
if gen_server_content_source:
print('#include "server_data.h"')
EmitDefinition(content.container, "datacontainer")
print('DATACONTAINER *g_pData = &datacontainer;')
print('CDataContainer *g_pData = &datacontainer;')
# NETWORK
if gen_network_header:

View file

@ -3,13 +3,13 @@ from datatypes import *
class Sound(Struct):
def __init__(self, filename=""):
Struct.__init__(self, "SOUND")
Struct.__init__(self, "CDataSound")
self.id = Int(0)
self.filename = String(filename)
class SoundSet(Struct):
def __init__(self, name="", files=[]):
Struct.__init__(self, "SOUNDSET")
Struct.__init__(self, "CDataSoundset")
self.name = String(name)
self.sounds = Array(Sound())
self.last = Int(-1)
@ -18,21 +18,21 @@ class SoundSet(Struct):
class Image(Struct):
def __init__(self, name="", filename=""):
Struct.__init__(self, "IMAGE")
Struct.__init__(self, "CDataImage")
self.name = String(name)
self.filename = String(filename)
self.id = Int(-1)
class SpriteSet(Struct):
def __init__(self, name="", image=None, gridx=0, gridy=0):
Struct.__init__(self, "SPRITESET")
Struct.__init__(self, "CDataSpriteset")
self.image = Pointer(Image, image) # TODO
self.gridx = Int(gridx)
self.gridy = Int(gridy)
class Sprite(Struct):
def __init__(self, name="", Set=None, x=0, y=0, w=0, h=0):
Struct.__init__(self, "SPRITE")
Struct.__init__(self, "CDataSprite")
self.name = String(name)
self.set = Pointer(SpriteSet, Set) # TODO
self.x = Int(x)
@ -42,14 +42,14 @@ class Sprite(Struct):
class Pickup(Struct):
def __init__(self, name="", respawntime=15, spawndelay=0):
Struct.__init__(self, "PICKUPSPEC")
Struct.__init__(self, "CDataPickupspec")
self.name = String(name)
self.respawntime = Int(respawntime)
self.spawndelay = Int(spawndelay)
class AnimKeyframe(Struct):
def __init__(self, time=0, x=0, y=0, angle=0):
Struct.__init__(self, "ANIM_KEYFRAME")
Struct.__init__(self, "CAnimKeyframe")
self.time = Float(time)
self.x = Float(x)
self.y = Float(y)
@ -57,12 +57,12 @@ class AnimKeyframe(Struct):
class AnimSequence(Struct):
def __init__(self):
Struct.__init__(self, "ANIM_SEQUENCE")
Struct.__init__(self, "CAnimSequence")
self.frames = Array(AnimKeyframe())
class Animation(Struct):
def __init__(self, name=""):
Struct.__init__(self, "ANIMATION")
Struct.__init__(self, "CAnimation")
self.name = String(name)
self.body = AnimSequence()
self.back_foot = AnimSequence()
@ -71,7 +71,7 @@ class Animation(Struct):
class WeaponSpec(Struct):
def __init__(self, container=None, name=""):
Struct.__init__(self, "WEAPONSPEC")
Struct.__init__(self, "CDataWeaponspec")
self.name = String(name)
self.sprite_body = Pointer(Sprite, Sprite())
self.sprite_cursor = Pointer(Sprite, Sprite())
@ -101,12 +101,12 @@ class WeaponSpec(Struct):
class Weapon_Hammer(Struct):
def __init__(self):
Struct.__init__(self, "WEAPONSPEC_HAMMER")
Struct.__init__(self, "CDataWeaponspecHammer")
self.base = Pointer(WeaponSpec, WeaponSpec())
class Weapon_Gun(Struct):
def __init__(self):
Struct.__init__(self, "WEAPONSPEC_GUN")
Struct.__init__(self, "CDataWeaponspecGun")
self.base = Pointer(WeaponSpec, WeaponSpec())
self.curvature = Float(1.25)
self.speed = Float(2200)
@ -114,7 +114,7 @@ class Weapon_Gun(Struct):
class Weapon_Shotgun(Struct):
def __init__(self):
Struct.__init__(self, "WEAPONSPEC_SHOTGUN")
Struct.__init__(self, "CDataWeaponspecShotgun")
self.base = Pointer(WeaponSpec, WeaponSpec())
self.curvature = Float(1.25)
self.speed = Float(2200)
@ -123,7 +123,7 @@ class Weapon_Shotgun(Struct):
class Weapon_Grenade(Struct):
def __init__(self):
Struct.__init__(self, "WEAPONSPEC_GRENADE")
Struct.__init__(self, "CDataWeaponspecGrenade")
self.base = Pointer(WeaponSpec, WeaponSpec())
self.curvature = Float(7.0)
self.speed = Float(1000)
@ -131,7 +131,7 @@ class Weapon_Grenade(Struct):
class Weapon_Rifle(Struct):
def __init__(self):
Struct.__init__(self, "WEAPONSPEC_RIFLE")
Struct.__init__(self, "CDataWeaponspecRifle")
self.base = Pointer(WeaponSpec, WeaponSpec())
self.reach = Float(800.0)
self.bounce_delay = Int(150)
@ -140,7 +140,7 @@ class Weapon_Rifle(Struct):
class Weapon_Ninja(Struct):
def __init__(self):
Struct.__init__(self, "WEAPONSPEC_NINJA")
Struct.__init__(self, "CDataWeaponspecNinja")
self.base = Pointer(WeaponSpec, WeaponSpec())
self.duration = Int(15000)
self.movetime = Int(200)
@ -148,7 +148,7 @@ class Weapon_Ninja(Struct):
class Weapons(Struct):
def __init__(self):
Struct.__init__(self, "WEAPONSPECS")
Struct.__init__(self, "CDataWeaponspecs")
self.hammer = Weapon_Hammer()
self.gun = Weapon_Gun()
self.shotgun = Weapon_Shotgun()
@ -159,7 +159,7 @@ class Weapons(Struct):
class DataContainer(Struct):
def __init__(self):
Struct.__init__(self, "DATACONTAINER")
Struct.__init__(self, "CDataContainer")
self.sounds = Array(SoundSet())
self.images = Array(Image())
self.pickups = Array(Pickup())

View file

@ -232,8 +232,8 @@ class NetObject:
class NetEvent(NetObject):
def __init__(self, name, variables):
NetObject.__init__(self, name, variables)
self.base_struct_name = "NETEVENT_%s" % self.base.upper()
self.struct_name = "NETEVENT_%s" % self.name.upper()
self.base_struct_name = "CNetEvent_%s" % self.base
self.struct_name = "CNetEvent_%s" % self.name
self.enum_name = "NETEVENTTYPE_%s" % self.name.upper()
class NetMessage(NetObject):

View file

@ -204,7 +204,7 @@ Objects = [
NetIntRange("m_ClientID", 0, 'MAX_CLIENTS-1'),
]),
NetEvent("SoundGlobal:Common", [
NetEvent("SoundGlobal:Common", [ #TODO 0.7: remove me
NetIntRange("m_SoundID", 0, 'NUM_SOUNDS-1'),
]),

View file

@ -39,6 +39,17 @@ inline float frandom() { return rand()/(float)(RAND_MAX); }
inline int f2fx(float v) { return (int)(v*(float)(1<<10)); }
inline float fx2f(int v) { return v*(1.0f/(1<<10)); }
inline int gcd(int a, int b)
{
while(b != 0)
{
int c = a % b;
a = b;
b = c;
}
return a;
}
class fxp
{
int value;

View file

@ -7,7 +7,7 @@
#include "animstate.h"
static void AnimSeqEval(ANIM_SEQUENCE *pSeq, float Time, ANIM_KEYFRAME *pFrame)
static void AnimSeqEval(CAnimSequence *pSeq, float Time, CAnimKeyframe *pFrame)
{
if(pSeq->m_NumFrames == 0)
{
@ -23,8 +23,8 @@ static void AnimSeqEval(ANIM_SEQUENCE *pSeq, float Time, ANIM_KEYFRAME *pFrame)
else
{
//time = max(0.0f, min(1.0f, time / duration)); // TODO: use clamp
ANIM_KEYFRAME *pFrame1 = 0;
ANIM_KEYFRAME *pFrame2 = 0;
CAnimKeyframe *pFrame1 = 0;
CAnimKeyframe *pFrame2 = 0;
float Blend = 0.0f;
// TODO: make this smarter.. binary search
@ -49,7 +49,7 @@ static void AnimSeqEval(ANIM_SEQUENCE *pSeq, float Time, ANIM_KEYFRAME *pFrame)
}
}
static void AnimAddKeyframe(ANIM_KEYFRAME *pSeq, ANIM_KEYFRAME *pAdded, float Amount)
static void AnimAddKeyframe(CAnimKeyframe *pSeq, CAnimKeyframe *pAdded, float Amount)
{
pSeq->m_X += pAdded->m_X*Amount;
pSeq->m_Y += pAdded->m_Y*Amount;
@ -65,7 +65,7 @@ static void AnimAdd(CAnimState *pState, CAnimState *pAdded, float Amount)
}
void CAnimState::Set(ANIMATION *pAnim, float Time)
void CAnimState::Set(CAnimation *pAnim, float Time)
{
AnimSeqEval(&pAnim->m_Body, Time, &m_Body);
AnimSeqEval(&pAnim->m_BackFoot, Time, &m_BackFoot);
@ -73,7 +73,7 @@ void CAnimState::Set(ANIMATION *pAnim, float Time)
AnimSeqEval(&pAnim->m_Attach, Time, &m_Attach);
}
void CAnimState::Add(ANIMATION *pAnim, float Time, float Amount)
void CAnimState::Add(CAnimation *pAnim, float Time, float Amount)
{
CAnimState Add;
Add.Set(pAnim, Time);

View file

@ -5,18 +5,18 @@
class CAnimState
{
ANIM_KEYFRAME m_Body;
ANIM_KEYFRAME m_BackFoot;
ANIM_KEYFRAME m_FrontFoot;
ANIM_KEYFRAME m_Attach;
CAnimKeyframe m_Body;
CAnimKeyframe m_BackFoot;
CAnimKeyframe m_FrontFoot;
CAnimKeyframe m_Attach;
public:
ANIM_KEYFRAME *GetBody() { return &m_Body; };
ANIM_KEYFRAME *GetBackFoot() { return &m_BackFoot; };
ANIM_KEYFRAME *GetFrontFoot() { return &m_FrontFoot; };
ANIM_KEYFRAME *GetAttach() { return &m_Attach; };
void Set(ANIMATION *pAnim, float Time);
void Add(ANIMATION *pAdded, float Time, float Amount);
CAnimKeyframe *GetBody() { return &m_Body; };
CAnimKeyframe *GetBackFoot() { return &m_BackFoot; };
CAnimKeyframe *GetFrontFoot() { return &m_FrontFoot; };
CAnimKeyframe *GetAttach() { return &m_Attach; };
void Set(CAnimation *pAnim, float Time);
void Add(CAnimation *pAdded, float Time, float Amount);
static CAnimState *GetIdle();
};

View file

@ -629,7 +629,8 @@ void CMenus::RenderSettingsGraphics(CUIRect MainView)
// display mode list
static float s_ScrollValue = 0;
int OldSelected = -1;
str_format(aBuf, sizeof(aBuf), "%s: %dx%d %d bit", Localize("Current"), s_GfxScreenWidth, s_GfxScreenHeight, s_GfxColorDepth);
int G = gcd(s_GfxScreenWidth, s_GfxScreenHeight);
str_format(aBuf, sizeof(aBuf), "%s: %dx%d %d bit (%d:%d)", Localize("Current"), s_GfxScreenWidth, s_GfxScreenHeight, s_GfxColorDepth, s_GfxScreenWidth/G, s_GfxScreenHeight/G);
UiDoListboxStart(&s_NumNodes , &ModeList, 24.0f, Localize("Display Modes"), aBuf, s_NumNodes, 1, OldSelected, s_ScrollValue);
for(int i = 0; i < s_NumNodes; ++i)
@ -645,7 +646,8 @@ void CMenus::RenderSettingsGraphics(CUIRect MainView)
CListboxItem Item = UiDoListboxNextItem(&s_aModes[i], OldSelected == i);
if(Item.m_Visible)
{
str_format(aBuf, sizeof(aBuf), " %dx%d %d bit", s_aModes[i].m_Width, s_aModes[i].m_Height, Depth);
int G = gcd(s_aModes[i].m_Width, s_aModes[i].m_Height);
str_format(aBuf, sizeof(aBuf), " %dx%d %d bit (%d:%d)", s_aModes[i].m_Width, s_aModes[i].m_Height, Depth, s_aModes[i].m_Width/G, s_aModes[i].m_Height/G);
UI()->DoLabelScaled(&Item.m_Rect, aBuf, 16.0f, -1);
}
}

View file

@ -134,7 +134,7 @@ void CSounds::Play(int Chn, int SetId, float Vol, vec2 Pos)
if(!g_Config.m_SndEnable || (Chn == CHN_MUSIC && !g_Config.m_SndMusic) || m_WaitForSoundJob || SetId < 0 || SetId >= g_pData->m_NumSounds)
return;
SOUNDSET *pSet = &g_pData->m_aSounds[SetId];
CDataSoundset *pSet = &g_pData->m_aSounds[SetId];
if(!pSet->m_NumSounds)
return;
@ -165,7 +165,7 @@ void CSounds::Stop(int SetId)
if(m_WaitForSoundJob || SetId < 0 || SetId >= g_pData->m_NumSounds)
return;
SOUNDSET *pSet = &g_pData->m_aSounds[SetId];
CDataSoundset *pSet = &g_pData->m_aSounds[SetId];
for(int i = 0; i < pSet->m_NumSounds; i++)
Sound()->Stop(pSet->m_aSounds[i].m_Id);

View file

@ -655,32 +655,32 @@ void CGameClient::ProcessEvents()
if(Item.m_Type == NETEVENTTYPE_DAMAGEIND)
{
NETEVENT_DAMAGEIND *ev = (NETEVENT_DAMAGEIND *)pData;
CNetEvent_DamageInd *ev = (CNetEvent_DamageInd *)pData;
g_GameClient.m_pEffects->DamageIndicator(vec2(ev->m_X, ev->m_Y), GetDirection(ev->m_Angle));
}
else if(Item.m_Type == NETEVENTTYPE_EXPLOSION)
{
NETEVENT_EXPLOSION *ev = (NETEVENT_EXPLOSION *)pData;
CNetEvent_Explosion *ev = (CNetEvent_Explosion *)pData;
g_GameClient.m_pEffects->Explosion(vec2(ev->m_X, ev->m_Y));
}
else if(Item.m_Type == NETEVENTTYPE_HAMMERHIT)
{
NETEVENT_HAMMERHIT *ev = (NETEVENT_HAMMERHIT *)pData;
CNetEvent_HammerHit *ev = (CNetEvent_HammerHit *)pData;
g_GameClient.m_pEffects->HammerHit(vec2(ev->m_X, ev->m_Y));
}
else if(Item.m_Type == NETEVENTTYPE_SPAWN)
{
NETEVENT_SPAWN *ev = (NETEVENT_SPAWN *)pData;
CNetEvent_Spawn *ev = (CNetEvent_Spawn *)pData;
g_GameClient.m_pEffects->PlayerSpawn(vec2(ev->m_X, ev->m_Y));
}
else if(Item.m_Type == NETEVENTTYPE_DEATH)
{
NETEVENT_DEATH *ev = (NETEVENT_DEATH *)pData;
CNetEvent_Death *ev = (CNetEvent_Death *)pData;
g_GameClient.m_pEffects->PlayerDeath(vec2(ev->m_X, ev->m_Y), ev->m_ClientID);
}
else if(Item.m_Type == NETEVENTTYPE_SOUNDWORLD)
{
NETEVENT_SOUNDWORLD *ev = (NETEVENT_SOUNDWORLD *)pData;
CNetEvent_SoundWorld *ev = (CNetEvent_SoundWorld *)pData;
g_GameClient.m_pSounds->Play(CSounds::CHN_WORLD, ev->m_SoundID, 1.0f, vec2(ev->m_X, ev->m_Y));
}
}

View file

@ -37,7 +37,7 @@ static void layershot_end()
config.cl_layershot++;
}*/
void CRenderTools::SelectSprite(SPRITE *pSpr, int Flags, int sx, int sy)
void CRenderTools::SelectSprite(CDataSprite *pSpr, int Flags, int sx, int sy)
{
int x = pSpr->m_X+sx;
int y = pSpr->m_Y+sy;
@ -236,7 +236,7 @@ void CRenderTools::RenderTee(CAnimState *pAnim, CTeeRenderInfo *pInfo, int Emote
}
// draw feet
ANIM_KEYFRAME *pFoot = f ? pAnim->GetFrontFoot() : pAnim->GetBackFoot();
CAnimKeyframe *pFoot = f ? pAnim->GetFrontFoot() : pAnim->GetBackFoot();
float w = BaseSize;
float h = BaseSize/2;

View file

@ -51,7 +51,7 @@ public:
//typedef struct SPRITE;
void SelectSprite(struct SPRITE *pSprite, int Flags=0, int sx=0, int sy=0);
void SelectSprite(struct CDataSprite *pSprite, int Flags=0, int sx=0, int sy=0);
void SelectSprite(int id, int Flags=0, int sx=0, int sy=0);
void DrawSprite(float x, float y, float size);

View file

@ -46,7 +46,7 @@ void CEventHandler::Snap(int SnappingClient)
{
if(SnappingClient == -1 || CmaskIsSet(m_aClientMasks[i], SnappingClient))
{
NETEVENT_COMMON *ev = (NETEVENT_COMMON *)&m_aData[m_aOffsets[i]];
CNetEvent_Common *ev = (CNetEvent_Common *)&m_aData[m_aOffsets[i]];
if(SnappingClient == -1 || distance(GameServer()->m_apPlayers[SnappingClient]->m_ViewPos, vec2(ev->m_X, ev->m_Y)) < 1500.0f)
{
void *d = GameServer()->Server()->SnapNewItem(m_aTypes[i], i, m_aSizes[i]);

View file

@ -110,7 +110,7 @@ void CGameContext::CreateDamageInd(vec2 Pos, float Angle, int Amount, int Mask)
for(int i = 0; i < Amount; i++)
{
float f = mix(s, e, float(i+1)/float(Amount+2));
NETEVENT_DAMAGEIND *pEvent = (NETEVENT_DAMAGEIND *)m_Events.Create(NETEVENTTYPE_DAMAGEIND, sizeof(NETEVENT_DAMAGEIND), Mask);
CNetEvent_DamageInd *pEvent = (CNetEvent_DamageInd *)m_Events.Create(NETEVENTTYPE_DAMAGEIND, sizeof(CNetEvent_DamageInd), Mask);
if(pEvent)
{
pEvent->m_X = (int)Pos.x;
@ -123,7 +123,7 @@ void CGameContext::CreateDamageInd(vec2 Pos, float Angle, int Amount, int Mask)
void CGameContext::CreateHammerHit(vec2 Pos, int Mask)
{
// create the event
NETEVENT_HAMMERHIT *pEvent = (NETEVENT_HAMMERHIT *)m_Events.Create(NETEVENTTYPE_HAMMERHIT, sizeof(NETEVENT_HAMMERHIT), Mask);
CNetEvent_HammerHit *pEvent = (CNetEvent_HammerHit *)m_Events.Create(NETEVENTTYPE_HAMMERHIT, sizeof(CNetEvent_HammerHit), Mask);
if(pEvent)
{
pEvent->m_X = (int)Pos.x;
@ -135,7 +135,7 @@ void CGameContext::CreateHammerHit(vec2 Pos, int Mask)
void CGameContext::CreateExplosion(vec2 Pos, int Owner, int Weapon, bool NoDamage, int ActivatedTeam, int Mask)
{
// create the event
NETEVENT_EXPLOSION *pEvent = (NETEVENT_EXPLOSION *)m_Events.Create(NETEVENTTYPE_EXPLOSION, sizeof(NETEVENT_EXPLOSION), Mask);
CNetEvent_Explosion *pEvent = (CNetEvent_Explosion *)m_Events.Create(NETEVENTTYPE_EXPLOSION, sizeof(CNetEvent_Explosion), Mask);
if(pEvent)
{
pEvent->m_X = (int)Pos.x;
@ -186,7 +186,7 @@ void create_smoke(vec2 Pos)
void CGameContext::CreatePlayerSpawn(vec2 Pos, int Mask)
{
// create the event
NETEVENT_SPAWN *ev = (NETEVENT_SPAWN *)m_Events.Create(NETEVENTTYPE_SPAWN, sizeof(NETEVENT_SPAWN), Mask);
CNetEvent_Spawn *ev = (CNetEvent_Spawn *)m_Events.Create(NETEVENTTYPE_SPAWN, sizeof(CNetEvent_Spawn), Mask);
if(ev)
{
ev->m_X = (int)Pos.x;
@ -197,7 +197,7 @@ void CGameContext::CreatePlayerSpawn(vec2 Pos, int Mask)
void CGameContext::CreateDeath(vec2 Pos, int ClientID, int Mask)
{
// create the event
NETEVENT_DEATH *pEvent = (NETEVENT_DEATH *)m_Events.Create(NETEVENTTYPE_DEATH, sizeof(NETEVENT_DEATH), Mask);
CNetEvent_Death *pEvent = (CNetEvent_Death *)m_Events.Create(NETEVENTTYPE_DEATH, sizeof(CNetEvent_Death), Mask);
if(pEvent)
{
pEvent->m_X = (int)Pos.x;
@ -212,7 +212,7 @@ void CGameContext::CreateSound(vec2 Pos, int Sound, int Mask)
return;
// create a sound
NETEVENT_SOUNDWORLD *pEvent = (NETEVENT_SOUNDWORLD *)m_Events.Create(NETEVENTTYPE_SOUNDWORLD, sizeof(NETEVENT_SOUNDWORLD), Mask);
CNetEvent_SoundWorld *pEvent = (CNetEvent_SoundWorld *)m_Events.Create(NETEVENTTYPE_SOUNDWORLD, sizeof(CNetEvent_SoundWorld), Mask);
if(pEvent)
{
pEvent->m_X = (int)Pos.x;
@ -887,13 +887,13 @@ void CGameContext::OnMessage(int MsgID, CUnpacker *pUnpacker, int ClientID)
}
if(KickID == ClientID)
{
SendChatTarget(ClientID, "You cant kick yourself");
SendChatTarget(ClientID, "You can't kick yourself");
return;
}
//if(Server()->IsAuthed(KickID))
if(m_apPlayers[KickID]->m_Authed > 0 && m_apPlayers[KickID]->m_Authed >= pPlayer->m_Authed)
{
SendChatTarget(ClientID, "You cant kick admins");
SendChatTarget(ClientID, "You can't kick admins");
m_apPlayers[ClientID]->m_Last_KickVote = time_get();
char aBufKick[128];
str_format(aBufKick, sizeof(aBufKick), "'%s' called for vote to kick you", Server()->ClientName(ClientID));
@ -938,7 +938,7 @@ void CGameContext::OnMessage(int MsgID, CUnpacker *pUnpacker, int ClientID)
}
if(SpectateID == ClientID)
{
SendChatTarget(ClientID, "You cant move yourself");
SendChatTarget(ClientID, "You can't move yourself");
return;
}