@@ -17,6 +17,10 @@ namespace lol | |||||
* Safe enum helpers | * Safe enum helpers | ||||
*/ | */ | ||||
map<int64_t, String> BuildEnumMap(String const &str, char const **custom) | |||||
{ | |||||
return BuildEnumMap(str.C(), custom); | |||||
} | |||||
map<int64_t, String> BuildEnumMap(char const *str, char const **custom) | map<int64_t, String> BuildEnumMap(char const *str, char const **custom) | ||||
{ | { | ||||
map<int64_t, String> ret; | map<int64_t, String> ret; | ||||
@@ -225,7 +225,7 @@ float AxisBinding::RetrieveCurrentValue() | |||||
array<Controller*> Controller::controllers; | array<Controller*> Controller::controllers; | ||||
Controller::Controller(char const* name, int nb_keys, int nb_axis) | |||||
Controller::Controller(String const &name, int nb_keys, int nb_axis) | |||||
{ | { | ||||
m_gamegroup = GAMEGROUP_BEFORE; | m_gamegroup = GAMEGROUP_BEFORE; | ||||
m_name = name; | m_name = name; | ||||
@@ -236,7 +236,7 @@ Controller::Controller(char const* name, int nb_keys, int nb_axis) | |||||
m_active = false; | m_active = false; | ||||
if (Get(name) != nullptr) | if (Get(name) != nullptr) | ||||
{ | { | ||||
Log::Warn("controller “%s” has already been registered", name); | |||||
Log::Warn("controller “%s” has already been registered", name.C()); | |||||
} | } | ||||
controllers.Push(this); | controllers.Push(this); | ||||
} | } | ||||
@@ -253,7 +253,7 @@ Controller::~Controller() | |||||
} | } | ||||
} | } | ||||
Controller* Controller::Get(char const* name) | |||||
Controller* Controller::Get(String const &name) | |||||
{ | { | ||||
for (int i = 0; i < controllers.Count(); ++i) | for (int i = 0; i < controllers.Count(); ++i) | ||||
{ | { | ||||
@@ -35,10 +35,12 @@ public: | |||||
/** Unbind a previously bound physical device and key. Returns true if the binding was existing. */ | /** Unbind a previously bound physical device and key. Returns true if the binding was existing. */ | ||||
bool Unbind(const String& device_name, const String& key_name); | bool Unbind(const String& device_name, const String& key_name); | ||||
/* Small helpers */ | /* Small helpers */ | ||||
void BindMouse(const String& key_name) { Bind(g_name_mouse, key_name); } | |||||
void BindKeyboard(const String& key_name) { Bind(g_name_keyboard, key_name); } | |||||
bool UnbindMouse(const String& key_name) { return Unbind(g_name_mouse, key_name); } | |||||
bool UnbindKeyboard(const String& key_name) { return Unbind(g_name_mouse, key_name); } | |||||
void BindMouse(const String& key_name) { Bind(g_name_mouse, key_name); } | |||||
void BindKeyboard(const String& key_name) { Bind(g_name_keyboard, key_name); } | |||||
void BindJoystick(const uint64_t num, const String& key_name) { Bind(g_name_joystick(num), key_name); } | |||||
bool UnbindMouse(const String& key_name) { return Unbind(g_name_mouse, key_name); } | |||||
bool UnbindKeyboard(const String& key_name) { return Unbind(g_name_keyboard, key_name); } | |||||
bool UnbindJoystick(const uint64_t num, const String& key_name) { return Unbind(g_name_joystick(num), key_name); } | |||||
/** Clear current binding */ | /** Clear current binding */ | ||||
void ClearBindings(); | void ClearBindings(); | ||||
/** Indicate wheither a physical device and key has been bound. Returns the number of bindings set. */ | /** Indicate wheither a physical device and key has been bound. Returns the number of bindings set. */ | ||||
@@ -98,6 +100,13 @@ public: | |||||
bool UnbindMouse(const String& axis_name) { return Unbind(g_name_mouse, axis_name); } | bool UnbindMouse(const String& axis_name) { return Unbind(g_name_mouse, axis_name); } | ||||
bool UnbindMouseKey(const String& key_name) { return UnbindKey(g_name_mouse, key_name); } | bool UnbindMouseKey(const String& key_name) { return UnbindKey(g_name_mouse, key_name); } | ||||
bool UnbindMouseKeys(const String& min_key_name, const String& max_key_name){ return UnbindKeys(g_name_mouse, min_key_name, max_key_name); } | bool UnbindMouseKeys(const String& min_key_name, const String& max_key_name){ return UnbindKeys(g_name_mouse, min_key_name, max_key_name); } | ||||
/* */ | |||||
void BindJoystick(const uint64_t num, const String& axis_name) { Bind(g_name_joystick(num), axis_name); } | |||||
void BindJoystickKey(const uint64_t num, const String& key_name) { BindKey(g_name_joystick(num), key_name); } | |||||
void BindJoystickKeys(const uint64_t num, const String& min_key_name, const String& max_key_name) { BindKeys(g_name_joystick(num), min_key_name, max_key_name); } | |||||
bool UnbindJoystick(const uint64_t num, const String& axis_name) { return Unbind(g_name_joystick(num), axis_name); } | |||||
bool UnbindJoystickKey(const uint64_t num, const String& key_name) { return UnbindKey(g_name_joystick(num), key_name); } | |||||
bool UnbindJoystickKeys(const uint64_t num, const String& min_key_name, const String& max_key_name){ return UnbindKeys(g_name_joystick(num), min_key_name, max_key_name); } | |||||
/** Clear current binding */ | /** Clear current binding */ | ||||
void ClearBindings(); | void ClearBindings(); | ||||
/** Indicate wheither a physical device and axis has been bound. Returns the number of bindings set. */ | /** Indicate wheither a physical device and axis has been bound. Returns the number of bindings set. */ | ||||
@@ -122,7 +131,7 @@ protected: | |||||
class Controller : public Entity | class Controller : public Entity | ||||
{ | { | ||||
public: | public: | ||||
Controller(char const* name, int nb_keys, int nb_axis); | |||||
Controller(String const &name, int nb_keys, int nb_axis); | |||||
~Controller(); | ~Controller(); | ||||
virtual void TickGame(float seconds); | virtual void TickGame(float seconds); | ||||
@@ -137,7 +146,7 @@ public: | |||||
KeyBinding& GetKey(int index) { return m_keys[index]; } | KeyBinding& GetKey(int index) { return m_keys[index]; } | ||||
AxisBinding& GetAxis(int index) { return m_axis[index]; } | AxisBinding& GetAxis(int index) { return m_axis[index]; } | ||||
static Controller* Get(char const* name); | |||||
static Controller* Get(String const &name); | |||||
protected: | protected: | ||||
array<KeyBinding> m_keys; | array<KeyBinding> m_keys; | ||||
@@ -93,19 +93,19 @@ InputDeviceInternal* InputDeviceInternal::CreateStandardKeyboard() | |||||
InputDeviceInternal* InputDeviceInternal::CreateStandardMouse() | InputDeviceInternal* InputDeviceInternal::CreateStandardMouse() | ||||
{ | { | ||||
InputDeviceInternal* mouse = new InputDeviceInternal(g_name_mouse.C()); | InputDeviceInternal* mouse = new InputDeviceInternal(g_name_mouse.C()); | ||||
mouse->AddKey("Left"); | |||||
mouse->AddKey("Middle"); | |||||
mouse->AddKey("Right"); | |||||
mouse->AddKey(g_name_mouse_key_left.C()); | |||||
mouse->AddKey(g_name_mouse_key_middle.C()); | |||||
mouse->AddKey(g_name_mouse_key_right.C()); | |||||
//Added to manage if mouse is in the screen or not. | //Added to manage if mouse is in the screen or not. | ||||
mouse->AddKey("InScreen"); | |||||
mouse->AddKey(g_name_mouse_key_inScreen.C()); | |||||
mouse->AddAxis("X"); | |||||
mouse->AddAxis("Y"); | |||||
mouse->AddAxis("XPixel"); | |||||
mouse->AddAxis("YPixel"); | |||||
mouse->AddAxis("Scroll"); | |||||
mouse->AddAxis(g_name_mouse_axis_x.C()); | |||||
mouse->AddAxis(g_name_mouse_axis_y.C()); | |||||
mouse->AddAxis(g_name_mouse_axis_xpixel.C()); | |||||
mouse->AddAxis(g_name_mouse_axis_ypixel.C()); | |||||
mouse->AddAxis(g_name_mouse_axis_scroll.C()); | |||||
mouse->AddCursor("Cursor"); | |||||
mouse->AddCursor(g_name_mouse_cursor.C()); | |||||
// TODO: extended button, and wheel (as axis or as buttons? or both?) | // TODO: extended button, and wheel (as axis or as buttons? or both?) | ||||
return mouse; | return mouse; | ||||
@@ -13,8 +13,47 @@ | |||||
namespace lol | namespace lol | ||||
{ | { | ||||
const String g_name_max("MAX"); | |||||
const String g_name_mouse("Mouse"); | const String g_name_mouse("Mouse"); | ||||
const String g_name_keyboard("Keyboard"); | const String g_name_keyboard("Keyboard"); | ||||
static String g_name_joystick(const uint64_t num) | |||||
{ | |||||
return String::Printf("Joystick%i", num); | |||||
} | |||||
//Mouse default buttons/axis | |||||
const String g_name_mouse_key_left("Left"); | |||||
const String g_name_mouse_key_middle("Middle"); | |||||
const String g_name_mouse_key_right("Right"); | |||||
const String g_name_mouse_key_inScreen("InScreen"); | |||||
const String g_name_mouse_axis_x("X"); | |||||
const String g_name_mouse_axis_y("Y"); | |||||
const String g_name_mouse_axis_xpixel("XPixel"); | |||||
const String g_name_mouse_axis_ypixel("YPixel"); | |||||
const String g_name_mouse_axis_scroll("Scroll"); | |||||
const String g_name_mouse_cursor("Cursor"); | |||||
//Xbox default buttons/axis | |||||
const String g_name_xbox_key_dpad_up("DPadUp"); | |||||
const String g_name_xbox_key_dpad_down("DPadDown"); | |||||
const String g_name_xbox_key_dpad_left("DPadLeft"); | |||||
const String g_name_xbox_key_dpad_right("DPadRight"); | |||||
const String g_name_xbox_key_left_thumb("LeftThumb"); | |||||
const String g_name_xbox_key_right_thumb("RightThumb"); | |||||
const String g_name_xbox_key_left_shoulder("LeftShoulder"); | |||||
const String g_name_xbox_key_right_shoulder("Rightshoulder"); | |||||
const String g_name_xbox_key_a("A"); | |||||
const String g_name_xbox_key_b("B"); | |||||
const String g_name_xbox_key_x("X"); | |||||
const String g_name_xbox_key_y("Y"); | |||||
const String g_name_xbox_key_start("Start"); | |||||
const String g_name_xbox_key_back("Back"); | |||||
const String g_name_xbox_axis_left_x("Axis1"); | |||||
const String g_name_xbox_axis_left_y("Axis2"); | |||||
const String g_name_xbox_axis_right_x("Axis3"); | |||||
const String g_name_xbox_axis_right_y("Axis4"); | |||||
const String g_name_xbox_axis_left_trigger("Axis5"); | |||||
const String g_name_xbox_axis_right_trigger("Axis6"); | |||||
class InputDevice | class InputDevice | ||||
{ | { | ||||
@@ -115,6 +154,20 @@ public: | |||||
return GetDevice(name); | return GetDevice(name); | ||||
} | } | ||||
/** Default helpers */ | |||||
static InputDevice* GetKeyboard() | |||||
{ | |||||
return GetDevice(g_name_keyboard); | |||||
} | |||||
static InputDevice* GetMouse() | |||||
{ | |||||
return GetDevice(g_name_mouse); | |||||
} | |||||
static InputDevice* GetJoystick(const uint64_t num) | |||||
{ | |||||
return GetDevice(g_name_joystick(num)); | |||||
} | |||||
/** Sets whether the mouse cursor should be captured. */ | /** Sets whether the mouse cursor should be captured. */ | ||||
static void CaptureMouse(bool activated) | static void CaptureMouse(bool activated) | ||||
{ | { | ||||
@@ -146,7 +199,7 @@ protected: | |||||
InputDevice(String const &name) : m_name(name) | InputDevice(String const &name) : m_name(name) | ||||
{ | { | ||||
devices.Push(this); | |||||
devices.PushUnique(this); | |||||
} | } | ||||
~InputDevice() | ~InputDevice() | ||||
@@ -17,6 +17,18 @@ namespace lol | |||||
extern map<int64_t, String> BuildEnumMap(char const *str, char const **custom); | extern map<int64_t, String> BuildEnumMap(char const *str, char const **custom); | ||||
class Enum | |||||
{ | |||||
public: | |||||
template<typename T> | |||||
static String EnumToString(T& parameter) | |||||
{ | |||||
//Create your own | |||||
ASSERT(0); | |||||
return String(); | |||||
} | |||||
}; | |||||
template<typename BASE, typename T = typename BASE::Type> | template<typename BASE, typename T = typename BASE::Type> | ||||
class SafeEnum : public BASE | class SafeEnum : public BASE | ||||
{ | { | ||||
@@ -54,23 +54,28 @@ D3d9Input::D3d9Input() | |||||
continue; | continue; | ||||
// TODO: we can put more friendly name here, such as LeftAxisX, ButtonX... | // TODO: we can put more friendly name here, such as LeftAxisX, ButtonX... | ||||
InputDeviceInternal* stick = new InputDeviceInternal(String::Printf("Joystick%d", i+1).C()); | InputDeviceInternal* stick = new InputDeviceInternal(String::Printf("Joystick%d", i+1).C()); | ||||
for (int j = 0; j < 4; ++j) | |||||
stick->AddAxis(String::Printf("Axis%d", j+1).C()); | |||||
stick->AddKey("DPadUp"); | |||||
stick->AddKey("DPadDown"); | |||||
stick->AddKey("DPadLeft"); | |||||
stick->AddKey("DPadRight"); | |||||
stick->AddKey("Start"); | |||||
stick->AddKey("Back"); | |||||
stick->AddKey("LeftThumb"); | |||||
stick->AddKey("RightThumb"); | |||||
stick->AddKey("LeftShoulder"); | |||||
stick->AddKey("RightShoulder"); | |||||
stick->AddKey("A"); | |||||
stick->AddKey("B"); | |||||
stick->AddKey("X"); | |||||
stick->AddKey("Y"); | |||||
stick->AddAxis(g_name_xbox_axis_left_x.C()); | |||||
stick->AddAxis(g_name_xbox_axis_left_y.C()); | |||||
stick->AddAxis(g_name_xbox_axis_right_x.C()); | |||||
stick->AddAxis(g_name_xbox_axis_right_y.C()); | |||||
stick->AddAxis(g_name_xbox_axis_left_trigger.C()); | |||||
stick->AddAxis(g_name_xbox_axis_right_trigger.C()); | |||||
stick->AddKey(g_name_xbox_key_dpad_up.C()); | |||||
stick->AddKey(g_name_xbox_key_dpad_down.C()); | |||||
stick->AddKey(g_name_xbox_key_dpad_left.C()); | |||||
stick->AddKey(g_name_xbox_key_dpad_right.C()); | |||||
stick->AddKey(g_name_xbox_key_start.C()); | |||||
stick->AddKey(g_name_xbox_key_back.C()); | |||||
stick->AddKey(g_name_xbox_key_left_thumb.C()); | |||||
stick->AddKey(g_name_xbox_key_right_thumb.C()); | |||||
stick->AddKey(g_name_xbox_key_left_shoulder.C()); | |||||
stick->AddKey(g_name_xbox_key_right_shoulder.C()); | |||||
stick->AddKey(g_name_xbox_key_a.C()); | |||||
stick->AddKey(g_name_xbox_key_b.C()); | |||||
stick->AddKey(g_name_xbox_key_x.C()); | |||||
stick->AddKey(g_name_xbox_key_y.C()); | |||||
m_data->m_joysticks.Push(i, stick); | m_data->m_joysticks.Push(i, stick); | ||||
} | } | ||||
@@ -107,6 +112,8 @@ void D3d9Input::TickGame(float seconds) | |||||
m_data->m_joysticks[i].m2->SetAxis(1, -(float)state.Gamepad.sThumbLY / 32768.f); | m_data->m_joysticks[i].m2->SetAxis(1, -(float)state.Gamepad.sThumbLY / 32768.f); | ||||
m_data->m_joysticks[i].m2->SetAxis(2, (float)state.Gamepad.sThumbRX / 32768.f); | m_data->m_joysticks[i].m2->SetAxis(2, (float)state.Gamepad.sThumbRX / 32768.f); | ||||
m_data->m_joysticks[i].m2->SetAxis(3, -(float)state.Gamepad.sThumbRY / 32768.f); | m_data->m_joysticks[i].m2->SetAxis(3, -(float)state.Gamepad.sThumbRY / 32768.f); | ||||
m_data->m_joysticks[i].m2->SetAxis(4, (float)state.Gamepad.bLeftTrigger / 32768.f); | |||||
m_data->m_joysticks[i].m2->SetAxis(5, (float)state.Gamepad.bRightTrigger / 32768.f); | |||||
for (int b = 0; b < 16; b++) | for (int b = 0; b < 16; b++) | ||||
{ | { | ||||
@@ -60,7 +60,6 @@ void Text::SetPos(vec3 pos) | |||||
data->pos = pos; | data->pos = pos; | ||||
} | } | ||||
vec3 Text::GetPos() | vec3 Text::GetPos() | ||||
{ | { | ||||
return (vec3)data->pos; | return (vec3)data->pos; | ||||
@@ -71,6 +70,12 @@ void Text::SetAlign(int align) | |||||
data->align = align; | data->align = align; | ||||
} | } | ||||
ivec2 Text::GetFontSize() | |||||
{ | |||||
Font *font = Forge::GetFont(data->font); | |||||
return font->GetSize(); | |||||
} | |||||
void Text::TickDraw(float seconds, Scene &scene) | void Text::TickDraw(float seconds, Scene &scene) | ||||
{ | { | ||||
Entity::TickDraw(seconds, scene); | Entity::TickDraw(seconds, scene); | ||||
@@ -33,6 +33,7 @@ public: | |||||
void SetPos(vec3 pos); | void SetPos(vec3 pos); | ||||
vec3 GetPos(); | vec3 GetPos(); | ||||
void SetAlign(int align); | void SetAlign(int align); | ||||
ivec2 GetFontSize(); | |||||
enum | enum | ||||
{ | { | ||||