helper function for weapon scripts (less duplicate code)
cleanup some register code angelscript exceptions have a stacktrace now optimize some networking code (only create packet when a packet is gonna be sent, instead of every frame
This commit is contained in:
parent
535bc99608
commit
2a24e662cd
@ -355,24 +355,15 @@ namespace spades {
|
|||||||
renderer->RegisterModel("Models/Weapons/Shotgun/Weapon.kv6");
|
renderer->RegisterModel("Models/Weapons/Shotgun/Weapon.kv6");
|
||||||
renderer->RegisterModel("Models/Weapons/Shotgun/WeaponNoPump.kv6");
|
renderer->RegisterModel("Models/Weapons/Shotgun/WeaponNoPump.kv6");
|
||||||
renderer->RegisterModel("Models/Weapons/Shotgun/Pump.kv6");
|
renderer->RegisterModel("Models/Weapons/Shotgun/Pump.kv6");
|
||||||
renderer->RegisterModel
|
renderer->RegisterModel("Models/Player/Arm.kv6");
|
||||||
("Models/Player/Arm.kv6");
|
renderer->RegisterModel("Models/Player/UpperArm.kv6");
|
||||||
renderer->RegisterModel
|
renderer->RegisterModel("Models/Player/LegCrouch.kv6");
|
||||||
("Models/Player/UpperArm.kv6");
|
renderer->RegisterModel("Models/Player/TorsoCrouch.kv6");
|
||||||
renderer->RegisterModel
|
renderer->RegisterModel("Models/Player/Leg.kv6");
|
||||||
("Models/Player/LegCrouch.kv6");
|
renderer->RegisterModel("Models/Player/Torso.kv6");
|
||||||
renderer->RegisterModel
|
renderer->RegisterModel("Models/Player/Arms.kv6");
|
||||||
("Models/Player/TorsoCrouch.kv6");
|
renderer->RegisterModel("Models/Player/Head.kv6");
|
||||||
renderer->RegisterModel
|
renderer->RegisterModel("Models/MapObjects/Intel.kv6");
|
||||||
("Models/Player/Leg.kv6");
|
|
||||||
renderer->RegisterModel
|
|
||||||
("Models/Player/Torso.kv6");
|
|
||||||
renderer->RegisterModel
|
|
||||||
("Models/Player/Arms.kv6");
|
|
||||||
renderer->RegisterModel
|
|
||||||
("Models/Player/Head.kv6");
|
|
||||||
renderer->RegisterModel
|
|
||||||
("Models/MapObjects/Intel.kv6");
|
|
||||||
renderer->RegisterModel("Models/MapObjects/CheckPoint.kv6");
|
renderer->RegisterModel("Models/MapObjects/CheckPoint.kv6");
|
||||||
renderer->RegisterImage("Gfx/Sight.tga");
|
renderer->RegisterImage("Gfx/Sight.tga");
|
||||||
renderer->RegisterImage("Gfx/Bullet/7.62mm.tga");
|
renderer->RegisterImage("Gfx/Bullet/7.62mm.tga");
|
||||||
@ -390,9 +381,6 @@ namespace spades {
|
|||||||
net = new NetClient(this);
|
net = new NetClient(this);
|
||||||
net->Connect(hostname);
|
net->Connect(hostname);
|
||||||
|
|
||||||
//net->Connect("192.168.24.24");
|
|
||||||
//net->Connect("127.0.0.1");
|
|
||||||
|
|
||||||
// decide log file name
|
// decide log file name
|
||||||
std::string fn = hostname.asString(false);
|
std::string fn = hostname.asString(false);
|
||||||
std::string fn2;
|
std::string fn2;
|
||||||
|
@ -65,116 +65,42 @@ namespace spades {
|
|||||||
IRenderer *renderer = client->GetRenderer();
|
IRenderer *renderer = client->GetRenderer();
|
||||||
IAudioDevice *audio = client->GetAudioDevice();
|
IAudioDevice *audio = client->GetAudioDevice();
|
||||||
|
|
||||||
static ScriptFunction spadeFactory
|
static ScriptFunction spadeFactory("ISpadeSkin@ CreateThirdPersonSpadeSkin(Renderer@, AudioDevice@)");
|
||||||
("ISpadeSkin@ CreateThirdPersonSpadeSkin(Renderer@, AudioDevice@)");
|
spadeSkin = initScriptFactory( spadeFactory, renderer, audio );
|
||||||
ctx = spadeFactory.Prepare();
|
|
||||||
ctx->SetArgObject(0, reinterpret_cast<void*>(renderer));
|
|
||||||
ctx->SetArgObject(1, reinterpret_cast<void*>(audio));
|
|
||||||
ctx.ExecuteChecked();
|
|
||||||
spadeSkin = reinterpret_cast<asIScriptObject *>(ctx->GetReturnObject());
|
|
||||||
spadeSkin->AddRef();
|
|
||||||
|
|
||||||
static ScriptFunction spadeViewFactory
|
static ScriptFunction spadeViewFactory("ISpadeSkin@ CreateViewSpadeSkin(Renderer@, AudioDevice@)");
|
||||||
("ISpadeSkin@ CreateViewSpadeSkin(Renderer@, AudioDevice@)");
|
spadeViewSkin = initScriptFactory( spadeViewFactory, renderer, audio );
|
||||||
ctx = spadeViewFactory.Prepare();
|
|
||||||
ctx->SetArgObject(0, reinterpret_cast<void*>(renderer));
|
|
||||||
ctx->SetArgObject(1, reinterpret_cast<void*>(audio));
|
|
||||||
ctx.ExecuteChecked();
|
|
||||||
spadeViewSkin = reinterpret_cast<asIScriptObject *>(ctx->GetReturnObject());
|
|
||||||
spadeViewSkin->AddRef();
|
|
||||||
|
|
||||||
static ScriptFunction blockFactory
|
static ScriptFunction blockFactory("IBlockSkin@ CreateThirdPersonBlockSkin(Renderer@, AudioDevice@)");
|
||||||
("IBlockSkin@ CreateThirdPersonBlockSkin(Renderer@, AudioDevice@)");
|
blockSkin = initScriptFactory( blockFactory, renderer, audio );
|
||||||
ctx = blockFactory.Prepare();
|
|
||||||
ctx->SetArgObject(0, reinterpret_cast<void*>(renderer));
|
|
||||||
ctx->SetArgObject(1, reinterpret_cast<void*>(audio));
|
|
||||||
ctx.ExecuteChecked();
|
|
||||||
blockSkin = reinterpret_cast<asIScriptObject *>(ctx->GetReturnObject());
|
|
||||||
blockSkin->AddRef();
|
|
||||||
|
|
||||||
static ScriptFunction blockViewFactory
|
static ScriptFunction blockViewFactory("IBlockSkin@ CreateViewBlockSkin(Renderer@, AudioDevice@)");
|
||||||
("IBlockSkin@ CreateViewBlockSkin(Renderer@, AudioDevice@)");
|
blockViewSkin = initScriptFactory( blockViewFactory, renderer, audio );
|
||||||
ctx = blockViewFactory.Prepare();
|
|
||||||
ctx->SetArgObject(0, reinterpret_cast<void*>(renderer));
|
|
||||||
ctx.ExecuteChecked();
|
|
||||||
blockViewSkin = reinterpret_cast<asIScriptObject *>(ctx->GetReturnObject());
|
|
||||||
blockViewSkin->AddRef();
|
|
||||||
|
|
||||||
static ScriptFunction grenadeFactory
|
static ScriptFunction grenadeFactory("IGrenadeSkin@ CreateThirdPersonGrenadeSkin(Renderer@, AudioDevice@)");
|
||||||
("IGrenadeSkin@ CreateThirdPersonGrenadeSkin(Renderer@, AudioDevice@)");
|
grenadeSkin = initScriptFactory( grenadeFactory, renderer, audio );
|
||||||
ctx = grenadeFactory.Prepare();
|
|
||||||
ctx->SetArgObject(0, reinterpret_cast<void*>(renderer));
|
|
||||||
ctx->SetArgObject(1, reinterpret_cast<void*>(audio));
|
|
||||||
ctx.ExecuteChecked();
|
|
||||||
grenadeSkin = reinterpret_cast<asIScriptObject *>(ctx->GetReturnObject());
|
|
||||||
grenadeSkin->AddRef();
|
|
||||||
|
|
||||||
static ScriptFunction grenadeViewFactory
|
static ScriptFunction grenadeViewFactory("IGrenadeSkin@ CreateViewGrenadeSkin(Renderer@, AudioDevice@)");
|
||||||
("IGrenadeSkin@ CreateViewGrenadeSkin(Renderer@, AudioDevice@)");
|
grenadeViewSkin = initScriptFactory( grenadeViewFactory, renderer, audio );
|
||||||
ctx = grenadeViewFactory.Prepare();
|
|
||||||
ctx->SetArgObject(0, reinterpret_cast<void*>(renderer));
|
|
||||||
ctx->SetArgObject(1, reinterpret_cast<void*>(audio));
|
|
||||||
ctx.ExecuteChecked();
|
|
||||||
grenadeViewSkin = reinterpret_cast<asIScriptObject *>(ctx->GetReturnObject());
|
|
||||||
grenadeViewSkin->AddRef();
|
|
||||||
|
|
||||||
static ScriptFunction rifleFactory
|
static ScriptFunction rifleFactory("IWeaponSkin@ CreateThirdPersonRifleSkin(Renderer@, AudioDevice@)");
|
||||||
("IWeaponSkin@ CreateThirdPersonRifleSkin(Renderer@, AudioDevice@)");
|
static ScriptFunction smgFactory("IWeaponSkin@ CreateThirdPersonSMGSkin(Renderer@, AudioDevice@)");
|
||||||
static ScriptFunction smgFactory
|
static ScriptFunction shotgunFactory("IWeaponSkin@ CreateThirdPersonShotgunSkin(Renderer@, AudioDevice@)");
|
||||||
("IWeaponSkin@ CreateThirdPersonSMGSkin(Renderer@, AudioDevice@)");
|
static ScriptFunction rifleViewFactory("IWeaponSkin@ CreateViewRifleSkin(Renderer@, AudioDevice@)");
|
||||||
static ScriptFunction shotgunFactory
|
static ScriptFunction smgViewFactory("IWeaponSkin@ CreateViewSMGSkin(Renderer@, AudioDevice@)");
|
||||||
("IWeaponSkin@ CreateThirdPersonShotgunSkin(Renderer@, AudioDevice@)");
|
static ScriptFunction shotgunViewFactory("IWeaponSkin@ CreateViewShotgunSkin(Renderer@, AudioDevice@)");
|
||||||
static ScriptFunction rifleViewFactory
|
|
||||||
("IWeaponSkin@ CreateViewRifleSkin(Renderer@, AudioDevice@)");
|
|
||||||
static ScriptFunction smgViewFactory
|
|
||||||
("IWeaponSkin@ CreateViewSMGSkin(Renderer@, AudioDevice@)");
|
|
||||||
static ScriptFunction shotgunViewFactory
|
|
||||||
("IWeaponSkin@ CreateViewShotgunSkin(Renderer@, AudioDevice@)");
|
|
||||||
switch(p->GetWeapon()->GetWeaponType()){
|
switch(p->GetWeapon()->GetWeaponType()){
|
||||||
case RIFLE_WEAPON:
|
case RIFLE_WEAPON:
|
||||||
ctx = rifleFactory.Prepare();
|
weaponSkin = initScriptFactory( rifleFactory, renderer, audio );
|
||||||
ctx->SetArgObject(0, reinterpret_cast<void*>(renderer));
|
weaponViewSkin = initScriptFactory( rifleViewFactory, renderer, audio );
|
||||||
ctx->SetArgObject(1, reinterpret_cast<void*>(audio));
|
|
||||||
ctx.ExecuteChecked();
|
|
||||||
weaponSkin = reinterpret_cast<asIScriptObject *>(ctx->GetReturnObject());
|
|
||||||
weaponSkin->AddRef();
|
|
||||||
|
|
||||||
ctx = rifleViewFactory.Prepare();
|
|
||||||
ctx->SetArgObject(0, reinterpret_cast<void*>(renderer));
|
|
||||||
ctx->SetArgObject(1, reinterpret_cast<void*>(audio));
|
|
||||||
ctx.ExecuteChecked();
|
|
||||||
weaponViewSkin = reinterpret_cast<asIScriptObject *>(ctx->GetReturnObject());
|
|
||||||
weaponViewSkin->AddRef();
|
|
||||||
break;
|
break;
|
||||||
case SMG_WEAPON:
|
case SMG_WEAPON:
|
||||||
ctx = smgFactory.Prepare();
|
weaponSkin = initScriptFactory( smgFactory, renderer, audio );
|
||||||
ctx->SetArgObject(0, reinterpret_cast<void*>(renderer));
|
weaponViewSkin = initScriptFactory( smgViewFactory, renderer, audio );
|
||||||
ctx->SetArgObject(1, reinterpret_cast<void*>(audio));
|
|
||||||
ctx.ExecuteChecked();
|
|
||||||
weaponSkin = reinterpret_cast<asIScriptObject *>(ctx->GetReturnObject());
|
|
||||||
weaponSkin->AddRef();
|
|
||||||
|
|
||||||
ctx = smgViewFactory.Prepare();
|
|
||||||
ctx->SetArgObject(0, reinterpret_cast<void*>(renderer));
|
|
||||||
ctx->SetArgObject(1, reinterpret_cast<void*>(audio));
|
|
||||||
ctx.ExecuteChecked();
|
|
||||||
weaponViewSkin = reinterpret_cast<asIScriptObject *>(ctx->GetReturnObject());
|
|
||||||
weaponViewSkin->AddRef();
|
|
||||||
break;
|
break;
|
||||||
case SHOTGUN_WEAPON:
|
case SHOTGUN_WEAPON:
|
||||||
ctx = shotgunFactory.Prepare();
|
weaponSkin = initScriptFactory( shotgunFactory, renderer, audio );
|
||||||
ctx->SetArgObject(0, reinterpret_cast<void*>(renderer));
|
weaponViewSkin = initScriptFactory( shotgunViewFactory, renderer, audio );
|
||||||
ctx->SetArgObject(1, reinterpret_cast<void*>(audio));
|
|
||||||
ctx.ExecuteChecked();
|
|
||||||
weaponSkin = reinterpret_cast<asIScriptObject *>(ctx->GetReturnObject());
|
|
||||||
weaponSkin->AddRef();
|
|
||||||
|
|
||||||
ctx = shotgunViewFactory.Prepare();
|
|
||||||
ctx->SetArgObject(0, reinterpret_cast<void*>(renderer));
|
|
||||||
ctx->SetArgObject(1, reinterpret_cast<void*>(audio));
|
|
||||||
ctx.ExecuteChecked();
|
|
||||||
weaponViewSkin = reinterpret_cast<asIScriptObject *>(ctx->GetReturnObject());
|
|
||||||
weaponViewSkin->AddRef();
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
SPAssert(false);
|
SPAssert(false);
|
||||||
@ -193,6 +119,18 @@ namespace spades {
|
|||||||
grenadeViewSkin->Release();
|
grenadeViewSkin->Release();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
asIScriptObject* ClientPlayer::initScriptFactory( ScriptFunction& creator, IRenderer* renderer, IAudioDevice* audio )
|
||||||
|
{
|
||||||
|
ScriptContextHandle ctx = creator.Prepare();
|
||||||
|
ctx->SetArgObject(0, reinterpret_cast<void*>(renderer));
|
||||||
|
ctx->SetArgObject(1, reinterpret_cast<void*>(audio));
|
||||||
|
ctx.ExecuteChecked();
|
||||||
|
asIScriptObject* result = reinterpret_cast<asIScriptObject *>(ctx->GetReturnObject());
|
||||||
|
result->AddRef();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
void ClientPlayer::Invalidate() {
|
void ClientPlayer::Invalidate() {
|
||||||
player = NULL;
|
player = NULL;
|
||||||
}
|
}
|
||||||
@ -325,12 +263,7 @@ namespace spades {
|
|||||||
|
|
||||||
Matrix4 ClientPlayer::GetEyeMatrix() {
|
Matrix4 ClientPlayer::GetEyeMatrix() {
|
||||||
Player *p = player;
|
Player *p = player;
|
||||||
Matrix4 eyeMatrix = Matrix4::FromAxis(-p->GetRight(),
|
return Matrix4::FromAxis(-p->GetRight(), p->GetFront(), -p->GetUp(), p->GetEye());
|
||||||
p->GetFront(),
|
|
||||||
-p->GetUp(),
|
|
||||||
p->GetEye());
|
|
||||||
|
|
||||||
return eyeMatrix;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClientPlayer::SetSkinParameterForTool(Player::ToolType type,
|
void ClientPlayer::SetSkinParameterForTool(Player::ToolType type,
|
||||||
@ -546,10 +479,8 @@ namespace spades {
|
|||||||
ModelRenderParam param;
|
ModelRenderParam param;
|
||||||
param.depthHack = true;
|
param.depthHack = true;
|
||||||
|
|
||||||
IModel *model = renderer->RegisterModel
|
IModel *model = renderer->RegisterModel("Models/Player/Arm.kv6");
|
||||||
("Models/Player/Arm.kv6");
|
IModel *model2 = renderer->RegisterModel("Models/Player/UpperArm.kv6");
|
||||||
IModel *model2 = renderer->RegisterModel
|
|
||||||
("Models/Player/UpperArm.kv6");
|
|
||||||
|
|
||||||
IntVector3 col = p->GetColor();
|
IntVector3 col = p->GetColor();
|
||||||
param.customColor = MakeVector3(col.x/255.f,
|
param.customColor = MakeVector3(col.x/255.f,
|
||||||
@ -717,8 +648,7 @@ namespace spades {
|
|||||||
leg1 = lower * leg1;
|
leg1 = lower * leg1;
|
||||||
leg2 = lower * leg2;
|
leg2 = lower * leg2;
|
||||||
|
|
||||||
model = renderer->RegisterModel
|
model = renderer->RegisterModel("Models/Player/LegCrouch.kv6");
|
||||||
("Models/Player/LegCrouch.kv6");
|
|
||||||
param.matrix = leg1 * scaler;
|
param.matrix = leg1 * scaler;
|
||||||
renderer->RenderModel(model, param);
|
renderer->RenderModel(model, param);
|
||||||
param.matrix = leg2 * scaler;
|
param.matrix = leg2 * scaler;
|
||||||
@ -727,8 +657,7 @@ namespace spades {
|
|||||||
torso = Matrix4::Translate(0.f,0.f,-0.55f);
|
torso = Matrix4::Translate(0.f,0.f,-0.55f);
|
||||||
torso = lower * torso;
|
torso = lower * torso;
|
||||||
|
|
||||||
model = renderer->RegisterModel
|
model = renderer->RegisterModel("Models/Player/TorsoCrouch.kv6");
|
||||||
("Models/Player/TorsoCrouch.kv6");
|
|
||||||
param.matrix = torso * scaler;
|
param.matrix = torso * scaler;
|
||||||
renderer->RenderModel(model, param);
|
renderer->RenderModel(model, param);
|
||||||
|
|
||||||
@ -757,8 +686,7 @@ namespace spades {
|
|||||||
leg1 = lower * leg1;
|
leg1 = lower * leg1;
|
||||||
leg2 = lower * leg2;
|
leg2 = lower * leg2;
|
||||||
|
|
||||||
model = renderer->RegisterModel
|
model = renderer->RegisterModel("Models/Player/Leg.kv6");
|
||||||
("Models/Player/Leg.kv6");
|
|
||||||
param.matrix = leg1 * scaler;
|
param.matrix = leg1 * scaler;
|
||||||
renderer->RenderModel(model, param);
|
renderer->RenderModel(model, param);
|
||||||
param.matrix = leg2 * scaler;
|
param.matrix = leg2 * scaler;
|
||||||
@ -767,8 +695,7 @@ namespace spades {
|
|||||||
torso = Matrix4::Translate(0.f,0.f,-1.0f);
|
torso = Matrix4::Translate(0.f,0.f,-1.0f);
|
||||||
torso = lower * torso;
|
torso = lower * torso;
|
||||||
|
|
||||||
model = renderer->RegisterModel
|
model = renderer->RegisterModel("Models/Player/Torso.kv6");
|
||||||
("Models/Player/Torso.kv6");
|
|
||||||
param.matrix = torso * scaler;
|
param.matrix = torso * scaler;
|
||||||
renderer->RenderModel(model, param);
|
renderer->RenderModel(model, param);
|
||||||
|
|
||||||
@ -792,8 +719,7 @@ namespace spades {
|
|||||||
arms = arms * Matrix4::Rotate(MakeVector3(1,0,0),
|
arms = arms * Matrix4::Rotate(MakeVector3(1,0,0),
|
||||||
armPitch);
|
armPitch);
|
||||||
|
|
||||||
model = renderer->RegisterModel
|
model = renderer->RegisterModel("Models/Player/Arms.kv6");
|
||||||
("Models/Player/Arms.kv6");
|
|
||||||
param.matrix = arms * scaler;
|
param.matrix = arms * scaler;
|
||||||
renderer->RenderModel(model, param);
|
renderer->RenderModel(model, param);
|
||||||
|
|
||||||
@ -801,8 +727,7 @@ namespace spades {
|
|||||||
head = head * Matrix4::Rotate(MakeVector3(1,0,0),
|
head = head * Matrix4::Rotate(MakeVector3(1,0,0),
|
||||||
pitch);
|
pitch);
|
||||||
|
|
||||||
model = renderer->RegisterModel
|
model = renderer->RegisterModel("Models/Player/Head.kv6");
|
||||||
("Models/Player/Head.kv6");
|
|
||||||
param.matrix = head * scaler;
|
param.matrix = head * scaler;
|
||||||
renderer->RenderModel(model, param);
|
renderer->RenderModel(model, param);
|
||||||
|
|
||||||
@ -831,8 +756,7 @@ namespace spades {
|
|||||||
col2.z/255.f);
|
col2.z/255.f);
|
||||||
Matrix4 mIntel = torso * Matrix4::Translate(0,0.6f,0.5f);
|
Matrix4 mIntel = torso * Matrix4::Translate(0,0.6f,0.5f);
|
||||||
|
|
||||||
model = renderer->RegisterModel
|
model = renderer->RegisterModel("Models/MapObjects/Intel.kv6");
|
||||||
("Models/MapObjects/Intel.kv6");
|
|
||||||
param.matrix = mIntel * scaler;
|
param.matrix = mIntel * scaler;
|
||||||
renderer->RenderModel(model, param);
|
renderer->RenderModel(model, param);
|
||||||
|
|
||||||
|
@ -26,9 +26,14 @@
|
|||||||
#include "Player.h"
|
#include "Player.h"
|
||||||
|
|
||||||
namespace spades {
|
namespace spades {
|
||||||
|
|
||||||
|
class ScriptFunction;
|
||||||
|
|
||||||
namespace client {
|
namespace client {
|
||||||
|
|
||||||
class Client;
|
class Client;
|
||||||
|
class IRenderer;
|
||||||
|
class IAudioDevice;
|
||||||
|
|
||||||
/** Representation of player which is used by
|
/** Representation of player which is used by
|
||||||
* drawing/view layer of game client. */
|
* drawing/view layer of game client. */
|
||||||
@ -66,6 +71,8 @@ namespace spades {
|
|||||||
float GetLocalFireVibration();
|
float GetLocalFireVibration();
|
||||||
|
|
||||||
bool ShouldRenderInThirdPersonView();
|
bool ShouldRenderInThirdPersonView();
|
||||||
|
|
||||||
|
asIScriptObject* initScriptFactory( ScriptFunction& creator, IRenderer* renderer, IAudioDevice* audio );
|
||||||
protected:
|
protected:
|
||||||
virtual ~ClientPlayer();
|
virtual ~ClientPlayer();
|
||||||
public:
|
public:
|
||||||
|
@ -865,10 +865,7 @@ namespace spades {
|
|||||||
SPRaise("Received invalid weapon: %d", weapon);
|
SPRaise("Received invalid weapon: %d", weapon);
|
||||||
}
|
}
|
||||||
|
|
||||||
Player *p = new Player(GetWorld(), pId,
|
Player *p = new Player(GetWorld(), pId, wType, team, savedPlayerPos[pId], GetWorld()->GetTeam(team).color);
|
||||||
wType, team,
|
|
||||||
savedPlayerPos[pId],
|
|
||||||
GetWorld()->GetTeam(team).color);
|
|
||||||
p->SetHeldBlockColor(color);
|
p->SetHeldBlockColor(color);
|
||||||
//p->SetOrientation(savedPlayerFront[pId]);
|
//p->SetOrientation(savedPlayerFront[pId]);
|
||||||
GetWorld()->SetPlayer(pId, p);
|
GetWorld()->SetPlayer(pId, p);
|
||||||
@ -1483,8 +1480,6 @@ namespace spades {
|
|||||||
|
|
||||||
void NetClient::SendPlayerInput(PlayerInput inp) {
|
void NetClient::SendPlayerInput(PlayerInput inp) {
|
||||||
SPADES_MARK_FUNCTION();
|
SPADES_MARK_FUNCTION();
|
||||||
NetPacketWriter wri(PacketTypeInputData);
|
|
||||||
wri.Write((uint8_t)GetLocalPlayer()->GetId());
|
|
||||||
|
|
||||||
uint8_t bits = 0;
|
uint8_t bits = 0;
|
||||||
if(inp.moveForward) bits |= 1 << 0;
|
if(inp.moveForward) bits |= 1 << 0;
|
||||||
@ -1495,29 +1490,32 @@ namespace spades {
|
|||||||
if(inp.crouch) bits |= 1 << 5;
|
if(inp.crouch) bits |= 1 << 5;
|
||||||
if(inp.sneak) bits |= 1 << 6;
|
if(inp.sneak) bits |= 1 << 6;
|
||||||
if(inp.sprint) bits |= 1 << 7;
|
if(inp.sprint) bits |= 1 << 7;
|
||||||
wri.Write(bits);
|
|
||||||
|
|
||||||
if((unsigned int)bits == lastPlayerInput)
|
if((unsigned int)bits == lastPlayerInput)
|
||||||
return;
|
return;
|
||||||
lastPlayerInput = bits;
|
lastPlayerInput = bits;
|
||||||
|
|
||||||
|
NetPacketWriter wri(PacketTypeInputData);
|
||||||
|
wri.Write((uint8_t)GetLocalPlayer()->GetId());
|
||||||
|
wri.Write(bits);
|
||||||
|
|
||||||
enet_peer_send(peer, 0, wri.CreatePacket());
|
enet_peer_send(peer, 0, wri.CreatePacket());
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetClient::SendWeaponInput( WeaponInput inp) {
|
void NetClient::SendWeaponInput( WeaponInput inp) {
|
||||||
SPADES_MARK_FUNCTION();
|
SPADES_MARK_FUNCTION();
|
||||||
NetPacketWriter wri(PacketTypeWeaponInput);
|
|
||||||
wri.Write((uint8_t)GetLocalPlayer()->GetId());
|
|
||||||
|
|
||||||
uint8_t bits = 0;
|
uint8_t bits = 0;
|
||||||
if(inp.primary) bits |= 1 << 0;
|
if(inp.primary) bits |= 1 << 0;
|
||||||
if(inp.secondary) bits |= 1 << 1;
|
if(inp.secondary) bits |= 1 << 1;
|
||||||
wri.Write(bits);
|
|
||||||
|
|
||||||
if((unsigned int)bits == lastWeaponInput)
|
if((unsigned int)bits == lastWeaponInput)
|
||||||
return;
|
return;
|
||||||
lastWeaponInput = bits;
|
lastWeaponInput = bits;
|
||||||
|
|
||||||
|
NetPacketWriter wri(PacketTypeWeaponInput);
|
||||||
|
wri.Write((uint8_t)GetLocalPlayer()->GetId());
|
||||||
|
wri.Write(bits);
|
||||||
|
|
||||||
enet_peer_send(peer, 0, wri.CreatePacket());
|
enet_peer_send(peer, 0, wri.CreatePacket());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include "ScriptManager.h"
|
#include "ScriptManager.h"
|
||||||
#include <Core/Debug.h>
|
#include <Core/Debug.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <sstream>
|
||||||
#include <Core/Exception.h>
|
#include <Core/Exception.h>
|
||||||
#include <Core/AutoLocker.h>
|
#include <Core/AutoLocker.h>
|
||||||
#include <Core/FileManager.h>
|
#include <Core/FileManager.h>
|
||||||
@ -63,13 +64,11 @@ namespace spades {
|
|||||||
fn += filename;
|
fn += filename;
|
||||||
data = FileManager::ReadAllBytes(fn.c_str());
|
data = FileManager::ReadAllBytes(fn.c_str());
|
||||||
}catch(const std::exception& ex) {
|
}catch(const std::exception& ex) {
|
||||||
SPLog("Failed to include '%s':%s",
|
SPLog("Failed to include '%s':%s", filename, ex.what());
|
||||||
filename, ex.what());
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
SPLog("Loading script '%s'",
|
SPLog("Loading script '%s'", filename);
|
||||||
filename);
|
|
||||||
return ProcessScriptSection(data.c_str(), (unsigned int)(data.length()), filename);
|
return ProcessScriptSection(data.c_str(), (unsigned int)(data.length()), filename);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -99,12 +98,9 @@ namespace spades {
|
|||||||
|
|
||||||
SPLog("Registering APIs");
|
SPLog("Registering APIs");
|
||||||
engine->SetDefaultNamespace("");
|
engine->SetDefaultNamespace("");
|
||||||
ScriptObjectRegistrar::RegisterAll(this,
|
ScriptObjectRegistrar::RegisterAll(this, ScriptObjectRegistrar::PhaseObjectType);
|
||||||
ScriptObjectRegistrar::PhaseObjectType);
|
ScriptObjectRegistrar::RegisterAll(this, ScriptObjectRegistrar::PhaseGlobalFunction);
|
||||||
ScriptObjectRegistrar::RegisterAll(this,
|
ScriptObjectRegistrar::RegisterAll(this, ScriptObjectRegistrar::PhaseObjectMember);
|
||||||
ScriptObjectRegistrar::PhaseGlobalFunction);
|
|
||||||
ScriptObjectRegistrar::RegisterAll(this,
|
|
||||||
ScriptObjectRegistrar::PhaseObjectMember);
|
|
||||||
|
|
||||||
SPLog("Loading scripts");
|
SPLog("Loading scripts");
|
||||||
engine->SetDefaultNamespace("");
|
engine->SetDefaultNamespace("");
|
||||||
@ -333,6 +329,11 @@ namespace spades {
|
|||||||
ScriptContextUtils::ScriptContextUtils(asIScriptContext *ctx):
|
ScriptContextUtils::ScriptContextUtils(asIScriptContext *ctx):
|
||||||
context(ctx){}
|
context(ctx){}
|
||||||
|
|
||||||
|
void ScriptContextUtils::appendLocation( std::stringstream& ss, asIScriptFunction* func, const char *secName, int line, int column )
|
||||||
|
{
|
||||||
|
ss << "[" << (secName?secName:"(stub)") << ":" << line << "," << column << "] " << func->GetDeclaration(true, true);
|
||||||
|
}
|
||||||
|
|
||||||
void ScriptContextUtils::ExecuteChecked() {
|
void ScriptContextUtils::ExecuteChecked() {
|
||||||
SPADES_MARK_FUNCTION();
|
SPADES_MARK_FUNCTION();
|
||||||
int r = context->Execute();
|
int r = context->Execute();
|
||||||
@ -345,11 +346,19 @@ namespace spades {
|
|||||||
const char *secName = NULL;
|
const char *secName = NULL;
|
||||||
int line = 0, column = 0;
|
int line = 0, column = 0;
|
||||||
asIScriptFunction *func = context->GetExceptionFunction();
|
asIScriptFunction *func = context->GetExceptionFunction();
|
||||||
// TODO: backtrace generation
|
|
||||||
line = context->GetExceptionLineNumber(&column, &secName);
|
line = context->GetExceptionLineNumber(&column, &secName);
|
||||||
SPRaise("%s @ [%s:%d,%d] %s", context->GetExceptionString(),
|
std::stringstream ss;
|
||||||
secName?secName:"(stub)", line, column,
|
ss << context->GetExceptionString() << " @ ";
|
||||||
func->GetDeclaration(true, true));
|
appendLocation( ss, func, secName, line, column );
|
||||||
|
asUINT num = context->GetCallstackSize();
|
||||||
|
for( asUINT n = 1; n < num; ++n ) { //skip entry 0, that's the current / exception addr
|
||||||
|
func = context->GetFunction( n );
|
||||||
|
line = context->GetLineNumber( n, &column, &secName);
|
||||||
|
ss << std::endl << " > ";
|
||||||
|
appendLocation( ss, func, secName, line, column );
|
||||||
|
}
|
||||||
|
std::string tmp = ss.str();
|
||||||
|
SPRaise( tmp.c_str() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,6 +63,8 @@ namespace spades {
|
|||||||
|
|
||||||
class ScriptContextUtils {
|
class ScriptContextUtils {
|
||||||
asIScriptContext *context;
|
asIScriptContext *context;
|
||||||
|
|
||||||
|
void appendLocation( std::stringstream& ss, asIScriptFunction* func, const char *secName, int line, int column );
|
||||||
public:
|
public:
|
||||||
ScriptContextUtils();
|
ScriptContextUtils();
|
||||||
ScriptContextUtils(asIScriptContext *);
|
ScriptContextUtils(asIScriptContext *);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user