Merge branch 'GameClient' of https://github.com/dean11/Danbias into GameServer

This commit is contained in:
dean11 2014-02-19 15:53:09 +01:00
commit d07ee997f5
12 changed files with 179 additions and 78 deletions

View File

@ -7,9 +7,6 @@
#include "EventButtonGUI.h" #include "EventButtonGUI.h"
//Only for testing because we don't have any other input
#include "../WindowManager/WindowShell.h"
namespace DanBias namespace DanBias
{ {
namespace Client namespace Client
@ -18,24 +15,25 @@ namespace DanBias
class ButtonEllipse : public EventButtonGUI<Owner> class ButtonEllipse : public EventButtonGUI<Owner>
{ {
public: public:
ButtonEllipse() ButtonEllipse(std::wstring textureName, std::wstring buttonText,
: EventButtonGUI(), radius(0) Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor,
Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height)
: EventButtonGUI(textureName, buttonText, textColor, backColor, hoverColor, pressedColor, owner, pos, size, resize)
{} {}
ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, Owner owner, Oyster::Math::Float3 pos, ButtonEllipse(std::wstring textureName, std::wstring buttonText,
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor,
: EventButtonGUI(textureName, buttonText, textColor, owner, pos, size, resize) EventFunc func, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height)
: EventButtonGUI(textureName, buttonText, textColor, backColor, hoverColor, pressedColor, func, pos, size, resize)
{} {}
ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, EventFunc func, Oyster::Math::Float3 pos, ButtonEllipse(std::wstring textureName, std::wstring buttonText,
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor,
: EventButtonGUI(textureName, buttonText, textColor, func, pos, size, resize) EventFunc func, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height)
: EventButtonGUI(textureName, buttonText, textColor, backColor, hoverColor, pressedColor, func, owner, pos, size, resize)
{} {}
ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, EventFunc func, Owner owner, Oyster::Math::Float3 pos, ButtonEllipse(std::wstring textureName, std::wstring buttonText,
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor,
: EventButtonGUI(textureName, buttonText, textColor, func, owner, pos, size, resize) EventFunc func, Owner owner, void* userData, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height)
{} : EventButtonGUI(textureName, buttonText, textColor, backColor, hoverColor, pressedColor, func, owner, userData, pos, size, resize)
ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float4 textColor, EventFunc func, Owner owner, void* userData, Oyster::Math::Float3 pos,
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height)
: EventButtonGUI(textureName, buttonText, textColor, func, owner, userData, pos, size, resize)
{} {}
virtual ~ButtonEllipse() virtual ~ButtonEllipse()
{} {}
@ -43,7 +41,6 @@ namespace DanBias
//Circle vs point collision //Circle vs point collision
bool Collision(Oyster::Event::MouseInput& input) bool Collision(Oyster::Event::MouseInput& input)
{ {
//Should come from the InputClass
float xMouse = input.x, yMouse = input.y; float xMouse = input.x, yMouse = input.y;
double normx = (xMouse - pos.x) / size.x; double normx = (xMouse - pos.x) / size.x;

View File

@ -6,9 +6,6 @@
#define DANBIAS_CLIENT_BUTTON_RECTANGLE_H #define DANBIAS_CLIENT_BUTTON_RECTANGLE_H
#include "EventButtonGUI.h" #include "EventButtonGUI.h"
#include <iostream>
//Only for testing because we don't have any other input
#include "../WindowManager/WindowShell.h"
namespace DanBias namespace DanBias
{ {
@ -18,55 +15,46 @@ namespace DanBias
class ButtonRectangle : public EventButtonGUI<Owner> class ButtonRectangle : public EventButtonGUI<Owner>
{ {
public: public:
ButtonRectangle() ButtonRectangle(std::wstring textureName, std::wstring buttonText,
: EventButtonGUI(), width(0), height(0) Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor,
Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None)
: EventButtonGUI(textureName, buttonText
, textColor, backColor, hoverColor, pressedColor
, owner, pos, size, resize)
{} {}
ButtonRectangle(std::wstring textureName, std::wstring buttonText, ButtonRectangle(std::wstring textureName, std::wstring buttonText,
Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor,
Owner owner, Oyster::Math::Float3 pos, EventFunc func, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None)
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None) : EventButtonGUI(textureName, buttonText
: EventButtonGUI(textureName, buttonText, , textColor, backColor, hoverColor, pressedColor
textColor, backColor, hoverColor, pressedColor, , func, pos, size, resize)
owner, pos, size, resize)
{} {}
ButtonRectangle(std::wstring textureName, std::wstring buttonText, ButtonRectangle(std::wstring textureName, std::wstring buttonText,
Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor,
EventFunc func, Oyster::Math::Float3 pos, EventFunc func, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None)
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None) : EventButtonGUI(textureName, buttonText
: EventButtonGUI(textureName, buttonText, , textColor, backColor, hoverColor, pressedColor
textColor, backColor, hoverColor, pressedColor, , func, owner, pos, size, resize)
func, pos, size, resize)
{} {}
ButtonRectangle(std::wstring textureName, std::wstring buttonText, ButtonRectangle(std::wstring textureName, std::wstring buttonText,
Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor,
EventFunc func, Owner owner, Oyster::Math::Float3 pos, EventFunc func, Owner owner, void* userData, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None)
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None) : EventButtonGUI(textureName, buttonText
: EventButtonGUI(textureName, buttonText, , textColor, backColor, hoverColor, pressedColor
textColor, backColor, hoverColor, pressedColor, , func, owner, userData, pos, size, resize)
func, owner, pos, size, resize)
{}
ButtonRectangle(std::wstring textureName, std::wstring buttonText,
Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor,
EventFunc func, Owner owner, void* userData, Oyster::Math::Float3 pos,
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None)
: EventButtonGUI(textureName, buttonText,
textColor, backColor, hoverColor, pressedColor,
func, owner, userData, pos, size, resize)
{} {}
virtual ~ButtonRectangle() virtual ~ButtonRectangle()
{} {}
//Circle vs point collision //Rectangle vs point collision
bool Collision(Oyster::Event::MouseInput& input) bool Collision(Oyster::Event::MouseInput& input)
{ {
//Should come from the InputClass
float xMouse = input.x, yMouse = input.y; float xMouse = input.x, yMouse = input.y;
float widthTemp = pos.x - size.x * 0.5f; float widthTemp = pos.x - size.x * 0.5f;
float widthTemp2 = pos.x + size.x * 0.5f; float widthTemp2 = pos.x + size.x * 0.5f;
float heightTemp = pos.y - size.y * 0.5f; float heightTemp = pos.y - size.y * 0.5f;
float heightTemp2 = pos.y + size.y * 0.5f; float heightTemp2 = pos.y + size.y * 0.5f;
//std::cout << p.x << ' ' << p.y << ' ' << widthTemp << ' ' << heightTemp << std::endl;
if(xMouse >= widthTemp && xMouse <= widthTemp2 && if(xMouse >= widthTemp && xMouse <= widthTemp2 &&
yMouse >= heightTemp && yMouse <= heightTemp2) yMouse >= heightTemp && yMouse <= heightTemp2)

View File

@ -7,6 +7,7 @@
#include "EventHandler/EventButton.h" #include "EventHandler/EventButton.h"
#include "DllInterfaces/GFXAPI.h" #include "DllInterfaces/GFXAPI.h"
#include "../WindowManager/WindowShell.h"
namespace DanBias namespace DanBias
{ {
@ -37,26 +38,27 @@ namespace DanBias
textColor(textColor), backColor(backColor), hoverColor(hoverColor), pressedColor(pressedColor) textColor(textColor), backColor(backColor), hoverColor(hoverColor), pressedColor(pressedColor)
{ {
CreateTexture(textureName); CreateTexture(textureName);
this->resizedSize = size;
if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize); if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize);
} }
EventButtonGUI(std::wstring textureName, std::wstring buttonText, EventButtonGUI(std::wstring textureName, std::wstring buttonText,
Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor,
EventFunc func, Oyster::Math::Float3 pos, EventFunc func, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None)
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None)
: EventButton(func), pos(pos), size(size), texture(NULL), buttonText(buttonText), : EventButton(func), pos(pos), size(size), texture(NULL), buttonText(buttonText),
textColor(textColor), backColor(backColor), hoverColor(hoverColor), pressedColor(pressedColor) textColor(textColor), backColor(backColor), hoverColor(hoverColor), pressedColor(pressedColor)
{ {
CreateTexture(textureName); CreateTexture(textureName);
this->resizedSize = size;
if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize); if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize);
} }
EventButtonGUI(std::wstring textureName, std::wstring buttonText, EventButtonGUI(std::wstring textureName, std::wstring buttonText,
Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor, Oyster::Math::Float4 textColor, Oyster::Math::Float4 backColor, Oyster::Math::Float4 hoverColor, Oyster::Math::Float4 pressedColor,
EventFunc func, Owner owner, Oyster::Math::Float3 pos, EventFunc func, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None)
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_None)
: EventButton(func, owner), pos(pos), size(size), texture(NULL), buttonText(buttonText), : EventButton(func, owner), pos(pos), size(size), texture(NULL), buttonText(buttonText),
textColor(textColor), backColor(backColor), hoverColor(hoverColor), pressedColor(pressedColor) textColor(textColor), backColor(backColor), hoverColor(hoverColor), pressedColor(pressedColor)
{ {
CreateTexture(textureName); CreateTexture(textureName);
this->resizedSize = size;
if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize); if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize);
} }
EventButtonGUI(std::wstring textureName, std::wstring buttonText, EventButtonGUI(std::wstring textureName, std::wstring buttonText,
@ -66,6 +68,7 @@ namespace DanBias
textColor(textColor), backColor(backColor), hoverColor(hoverColor), pressedColor(pressedColor) textColor(textColor), backColor(backColor), hoverColor(hoverColor), pressedColor(pressedColor)
{ {
CreateTexture(textureName); CreateTexture(textureName);
this->resizedSize = size;
if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize); if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize);
} }
virtual ~EventButtonGUI() virtual ~EventButtonGUI()
@ -92,15 +95,15 @@ namespace DanBias
if(EventButton<Owner>::GetState() == ButtonState_None) if(EventButton<Owner>::GetState() == ButtonState_None)
{ {
Oyster::Graphics::API::RenderGuiElement(texture, pos, size, backColor); Oyster::Graphics::API::RenderGuiElement(texture, pos, resizedSize, backColor);
} }
else if(EventButton<Owner>::GetState() == ButtonState_Hover) else if(EventButton<Owner>::GetState() == ButtonState_Hover)
{ {
Oyster::Graphics::API::RenderGuiElement(texture, pos, size, hoverColor); Oyster::Graphics::API::RenderGuiElement(texture, pos, resizedSize, hoverColor);
} }
else else
{ {
Oyster::Graphics::API::RenderGuiElement(texture, pos, size, pressedColor); Oyster::Graphics::API::RenderGuiElement(texture, pos, resizedSize, pressedColor);
} }
} }
@ -121,15 +124,18 @@ namespace DanBias
GetClientRect(WindowShell::GetHWND(), &r); GetClientRect(WindowShell::GetHWND(), &r);
if(resize == ResizeAspectRatio_Height) if(resize == ResizeAspectRatio_Height)
size.y *= (float)r.right/(float)r.bottom; resizedSize.y = size.y * ((float)r.right/(float)r.bottom);
else if(resize == ResizeAspectRatio_Width) else if(resize == ResizeAspectRatio_Width)
size.x *= (float)r.bottom/(float)r.right; resizedSize.x = size.x * ((float)r.bottom/(float)r.right);
} }
protected: protected:
Oyster::Math::Float3 pos; Oyster::Math::Float3 pos;
Oyster::Math::Float2 size; Oyster::Math::Float2 size;
//The new calculated resize, it's only used for the button not the text right now.
Oyster::Math::Float2 resizedSize;
Oyster::Graphics::API::Texture texture; Oyster::Graphics::API::Texture texture;
std::wstring buttonText; std::wstring buttonText;

View File

@ -4,12 +4,19 @@
using namespace ::Oyster::Math3D; using namespace ::Oyster::Math3D;
using namespace ::Utility::Value; using namespace ::Utility::Value;
inline Quaternion Transform( const Quaternion &transformer, const Quaternion &transformee )
{
// return transformer * transformee;
return transformee * transformer;
}
Camera_FPSV2::Camera_FPSV2() Camera_FPSV2::Camera_FPSV2()
{ // this->head is default set to identity uniformprojection at origo { // this->head is default set to identity uniformprojection at origo
this->pitchUp = 0.0f; this->pitchUp = 0.0f;
this->headOffset = this->headOffset =
this->body.translation = Float3::null; this->body.translation = Float3::null;
this->body.rotation = Quaternion::identity; this->body.rotation = Quaternion::identity;
this->pitchHaveChanged = false;
} }
Camera_FPSV2::~Camera_FPSV2() {} Camera_FPSV2::~Camera_FPSV2() {}
@ -21,6 +28,7 @@ Camera_FPSV2 & Camera_FPSV2::operator = ( const Camera_FPSV2 &camera )
this->headOffset = camera.headOffset; this->headOffset = camera.headOffset;
this->body.translation = camera.body.translation; this->body.translation = camera.body.translation;
this->body.rotation = camera.body.rotation; this->body.rotation = camera.body.rotation;
this->pitchHaveChanged = camera.pitchHaveChanged;
return *this; return *this;
} }
@ -38,8 +46,14 @@ void Camera_FPSV2::SetPosition( const Float3 &translation )
void Camera_FPSV2::SetRotation( const Quaternion &rotation ) void Camera_FPSV2::SetRotation( const Quaternion &rotation )
{ {
if( !Within(rotation.GetNorm(), .99f, 1.01f) )
{ // HACK: bug trap
const char *breakPoint = "Caught an invalid rotation!";
}
this->body.rotation = rotation; this->body.rotation = rotation;
this->head.SetRotation( rotation * Rotation(this->pitchUp, this->GetNormalOf(Float3::standard_unit_x) ) ); this->head.SetRotation( Transform(rotation, Rotation(this->pitchUp, WorldAxisOf(rotation, Float3::standard_unit_x))) );
this->pitchHaveChanged = false;
} }
void Camera_FPSV2::SetAngular( const Float3 &axis ) void Camera_FPSV2::SetAngular( const Float3 &axis )
@ -64,6 +78,12 @@ void Camera_FPSV2::SetPerspectiveProjection( Float verticalFoV, Float aspectRati
void Camera_FPSV2::UpdateOrientation() void Camera_FPSV2::UpdateOrientation()
{ {
if( this->pitchHaveChanged )
{
this->head.SetRotation( Transform(this->body.rotation, Rotation(this->pitchUp, WorldAxisOf(this->body.rotation, Float3::standard_unit_x))) );
this->pitchHaveChanged = false;
}
Float4x4 orientation; Float4x4 orientation;
OrientationMatrix( this->body.rotation, this->body.translation, orientation ); OrientationMatrix( this->body.rotation, this->body.translation, orientation );
@ -73,7 +93,8 @@ void Camera_FPSV2::UpdateOrientation()
void Camera_FPSV2::SnapUpToNormal( const Float3 &normal ) void Camera_FPSV2::SnapUpToNormal( const Float3 &normal )
{ {
this->body.rotation = Rotation( SnapAngularAxis(AngularAxis(this->body.rotation), WorldAxisOf(this->body.rotation, Float3::standard_unit_y), normal) ); this->body.rotation = Rotation( SnapAngularAxis(AngularAxis(this->body.rotation), WorldAxisOf(this->body.rotation, Float3::standard_unit_y), normal) );
this->head.SetRotation( this->body.rotation * Rotation(this->pitchUp * Float3::standard_unit_x) ); this->head.SetRotation( Transform(this->body.rotation, Rotation(this->pitchUp, WorldAxisOf(this->body.rotation, Float3::standard_unit_x))) );
this->pitchHaveChanged = false;
} }
void Camera_FPSV2::Move( const Float3 &deltaPosition ) void Camera_FPSV2::Move( const Float3 &deltaPosition )
@ -84,8 +105,8 @@ void Camera_FPSV2::Move( const Float3 &deltaPosition )
void Camera_FPSV2::Rotate( const Quaternion &deltaRotation ) void Camera_FPSV2::Rotate( const Quaternion &deltaRotation )
{ {
this->head.Rotate( deltaRotation );
this->body.rotation *= deltaRotation; this->body.rotation *= deltaRotation;
this->pitchHaveChanged = true;
} }
void Camera_FPSV2::Rotate( const Float3 &deltaAngularAxis ) void Camera_FPSV2::Rotate( const Float3 &deltaAngularAxis )
@ -115,8 +136,13 @@ void Camera_FPSV2::StrafeLeft( Float distance )
void Camera_FPSV2::PitchUp( Float radian ) void Camera_FPSV2::PitchUp( Float radian )
{ {
if( radian >= 0.5f )
{ // HACK: debugging
const char *breakPoint = "";
}
this->pitchUp = Clamp( this->pitchUp + radian, -0.48f * pi, 0.48f * pi ); this->pitchUp = Clamp( this->pitchUp + radian, -0.48f * pi, 0.48f * pi );
this->head.SetRotation( this->body.rotation * Rotation(this->pitchUp, Float3::standard_unit_x) ); this->pitchHaveChanged = true;
} }
void Camera_FPSV2::PitchDown( Float radian ) void Camera_FPSV2::PitchDown( Float radian )
@ -147,6 +173,12 @@ const Float3 & Camera_FPSV2::GetPosition() const
Float4x4 & Camera_FPSV2::GetViewMatrix( Float4x4 &targetMem ) const Float4x4 & Camera_FPSV2::GetViewMatrix( Float4x4 &targetMem ) const
{ {
if( this->pitchHaveChanged )
{
this->head.SetRotation( Transform(this->body.rotation, Rotation(this->pitchUp, WorldAxisOf(this->body.rotation, Float3::standard_unit_x))) );
this->pitchHaveChanged = false;
}
return this->head.GetViewMatrix( targetMem ); return this->head.GetViewMatrix( targetMem );
} }
@ -157,11 +189,23 @@ const Float4x4 & Camera_FPSV2::GetProjectionMatrix() const
Float4x4 & Camera_FPSV2::GetViewsProjMatrix( Float4x4 &targetMem ) const Float4x4 & Camera_FPSV2::GetViewsProjMatrix( Float4x4 &targetMem ) const
{ {
if( this->pitchHaveChanged )
{
this->head.SetRotation( Transform(this->body.rotation, Rotation(this->pitchUp, WorldAxisOf(this->body.rotation, Float3::standard_unit_x))) );
this->pitchHaveChanged = false;
}
return this->head.GetViewsProjMatrix( targetMem ); return this->head.GetViewsProjMatrix( targetMem );
} }
Float3 Camera_FPSV2::GetNormalOf( const Float3 &axis ) const Float3 Camera_FPSV2::GetNormalOf( const Float3 &axis ) const
{ {
if( this->pitchHaveChanged )
{
this->head.SetRotation( Transform(this->body.rotation, Rotation(this->pitchUp, WorldAxisOf(this->body.rotation, Float3::standard_unit_x))) );
this->pitchHaveChanged = false;
}
return this->head.GetNormalOf( axis ); return this->head.GetNormalOf( axis );
} }
@ -177,6 +221,12 @@ Float3 Camera_FPSV2::GetUp() const
Float3 Camera_FPSV2::GetLook() const Float3 Camera_FPSV2::GetLook() const
{ {
if( this->pitchHaveChanged )
{
this->head.SetRotation( Transform(this->body.rotation, Rotation(this->pitchUp, WorldAxisOf(this->body.rotation, Float3::standard_unit_x))) );
this->pitchHaveChanged = false;
}
return this->head.GetNormalOf( -Float3::standard_unit_z ); return this->head.GetNormalOf( -Float3::standard_unit_z );
} }

View File

@ -50,7 +50,7 @@ public:
::Oyster::Math::Float3 GetForward() const; ::Oyster::Math::Float3 GetForward() const;
private: private:
Camera_BasicV2 head; mutable Camera_BasicV2 head;
::Oyster::Math::Float pitchUp; ::Oyster::Math::Float pitchUp;
::Oyster::Math::Float3 headOffset; ::Oyster::Math::Float3 headOffset;
struct struct
@ -58,6 +58,7 @@ private:
::Oyster::Math::Float3 translation; ::Oyster::Math::Float3 translation;
::Oyster::Math::Quaternion rotation; ::Oyster::Math::Quaternion rotation;
} body; } body;
mutable bool pitchHaveChanged;
}; };
#endif #endif

View File

@ -480,6 +480,12 @@ const GameClientState::NetEvent & GameState::DataRecieved( const GameClientState
// if is this player. Remember to change camera // if is this player. Remember to change camera
if( this->privData->myId == decoded.object_ID ) if( this->privData->myId == decoded.object_ID )
{ {
if( !Within(position.Dot(position), 2500.0f, 90000.0f) )
{ // HACK: bug trap
const char *breakPoint = "Something is wrong.";
//position = Float3( 0.0f, 160.0f, 0.0f );
}
this->privData->camera.SetPosition( position ); this->privData->camera.SetPosition( position );
this->privData->camera.SetRotation( rotation ); this->privData->camera.SetRotation( rotation );
this->privData->player.setPos( position ); this->privData->player.setPos( position );

View File

@ -126,9 +126,6 @@ void LanMenuState::ChangeState( ClientState next )
// attempt to connect to lobby // attempt to connect to lobby
if( !this->privData->nwClient->Connect(this->privData->connectPort, (*this->privData->connectIP)[0]) ) if( !this->privData->nwClient->Connect(this->privData->connectPort, (*this->privData->connectIP)[0]) )
return; return;
//this->privData->nwClient->Disconnect();
//if( !this->privData->nwClient->Reconnect() )
//return;
break; break;
default: break; default: break;
} }

View File

@ -157,8 +157,6 @@ std::vector<SmartPointer<ObjectTypeHeader>> LevelParser::Parse(std::string filen
break; break;
} }
//this is a hotfix, fix so you only load the relevant data when the file is updated //this is a hotfix, fix so you only load the relevant data when the file is updated
default: default:
//Couldn't find specialType //Couldn't find specialType
break; break;

View File

@ -49,7 +49,16 @@ namespace LinearAlgebra
Quaternion<ScalarType> operator - ( const Quaternion<ScalarType> &quaternion ) const; Quaternion<ScalarType> operator - ( const Quaternion<ScalarType> &quaternion ) const;
Quaternion<ScalarType> operator - ( ) const; Quaternion<ScalarType> operator - ( ) const;
Quaternion<ScalarType> & Conjugate( );
Quaternion<ScalarType> & Normalize( );
Quaternion<ScalarType> & Inverse( );
Quaternion<ScalarType> GetConjugate( ) const; Quaternion<ScalarType> GetConjugate( ) const;
Quaternion<ScalarType> GetNormalized( ) const;
Quaternion<ScalarType> GetInversed( ) const;
ScalarType GetNorm( ) const;
ScalarType GetModulus( ) const;
}; };
/////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////
@ -205,11 +214,54 @@ namespace LinearAlgebra
return Quaternion<ScalarType>(-this->imaginary, -this->real); return Quaternion<ScalarType>(-this->imaginary, -this->real);
} }
template<typename ScalarType>
inline Quaternion<ScalarType> & Quaternion<ScalarType>::Conjugate( )
{
this->imaginary = -this->imaginary;
return *this;
}
template<typename ScalarType>
inline Quaternion<ScalarType> & Quaternion<ScalarType>::Normalize( )
{
return *this /= this->GetModulus();
}
template<typename ScalarType>
inline Quaternion<ScalarType> & Quaternion<ScalarType>::Inverse( )
{
return this->Conjugate() /= this->GetNorm();
}
template<typename ScalarType> template<typename ScalarType>
inline Quaternion<ScalarType> Quaternion<ScalarType>::GetConjugate( ) const inline Quaternion<ScalarType> Quaternion<ScalarType>::GetConjugate( ) const
{ {
return Quaternion<ScalarType>(-this->imaginary, this->real ); return Quaternion<ScalarType>(-this->imaginary, this->real );
} }
template<typename ScalarType>
inline Quaternion<ScalarType> Quaternion<ScalarType>::GetNormalized( ) const
{
return *this / this->GetModulus();
}
template<typename ScalarType>
inline Quaternion<ScalarType> Quaternion<ScalarType>::GetInversed( ) const
{
return this->GetConjugate() /= this->GetNorm();
}
template<typename ScalarType>
inline ScalarType Quaternion<ScalarType>::GetNorm( ) const
{
return this->imaginary.Dot(this->imaginary) + this->real * this->real;
}
template<typename ScalarType>
inline ScalarType Quaternion<ScalarType>::GetModulus( ) const
{
return (ScalarType)::std::sqrt( this->GetNorm() );
}
} }
#endif #endif

View File

@ -337,7 +337,11 @@ namespace Utility
template<typename ValueType> template<typename ValueType>
inline ValueType Clamp( const ValueType &value, const ValueType &min, const ValueType &max ) inline ValueType Clamp( const ValueType &value, const ValueType &min, const ValueType &max )
{ return value < min ? Max( value, max ) : min; } {
if( value < min ) return min;
if( value > max ) return max;
return value;
}
template<typename ValueType> template<typename ValueType>
inline ValueType Average( const ValueType &valueA, const ValueType &valueB ) inline ValueType Average( const ValueType &valueA, const ValueType &valueB )

View File

@ -290,9 +290,12 @@ bool NetworkClient::Connect(ConnectionInfo& socket)
bool NetworkClient::Connect(unsigned short port, const char serverIP[]) bool NetworkClient::Connect(unsigned short port, const char serverIP[])
{ {
if(this->IsConnected()) return false; //Return true if you are already connected.
if(this->privateData) return false; if(this->IsConnected())
if(!this->privateData) this->privateData = new PrivateData(); return true;
if(!this->privateData)
this->privateData = new PrivateData();
int result = this->privateData->connection.Connect(port, serverIP, false); int result = this->privateData->connection.Connect(port, serverIP, false);
@ -319,10 +322,10 @@ bool NetworkClient::Connect(unsigned short port, std::wstring serverIP)
bool NetworkClient::Reconnect() bool NetworkClient::Reconnect()
{ {
//Return true if you are already connected.
if(this->IsConnected()) if(this->IsConnected())
return false; return true;
//if(this->privateData)
//return false;
if(!this->privateData) this->privateData = new PrivateData(); if(!this->privateData) this->privateData = new PrivateData();
int result = this->privateData->connection.Reconnect(); int result = this->privateData->connection.Reconnect();
@ -342,11 +345,10 @@ void NetworkClient::Disconnect()
{ {
if(!privateData) return; if(!privateData) return;
privateData->thread.Terminate(); privateData->thread.Stop();
privateData->connection.Disconnect(); privateData->connection.Disconnect();
this->privateData->sendQueue.Clear(); this->privateData->sendQueue.Clear();
this->privateData->recieveQueue.Clear(); this->privateData->recieveQueue.Clear();
} }
void NetworkClient::Send(CustomProtocolObject& protocol) void NetworkClient::Send(CustomProtocolObject& protocol)

View File

@ -91,14 +91,14 @@ int Connection::Reconnect()
if(this->socket == -1 || this->socket == 0) InitiateSocket(); if(this->socket == -1 || this->socket == 0) InitiateSocket();
struct hostent *hostEnt; struct hostent *hostEnt;
if((hostEnt = gethostbyname(lastConnectAddr.c_str())) == NULL) if((hostEnt = gethostbyname(this->lastConnectAddr.c_str())) == NULL)
{ {
return WSAGetLastError(); return WSAGetLastError();
} }
struct sockaddr_in server; struct sockaddr_in server;
server.sin_family = AF_INET; server.sin_family = AF_INET;
server.sin_port = htons(lastConnectPort); server.sin_port = htons(this->lastConnectPort);
server.sin_addr.s_addr = *(unsigned long*) hostEnt->h_addr; server.sin_addr.s_addr = *(unsigned long*) hostEnt->h_addr;
SetBlockingMode(true); SetBlockingMode(true);