瀏覽代碼

Added some shit in controller and text

undefined
Benjamin ‘Touky’ Huet Sam Hocevar <sam@hocevar.net> 10 年之前
父節點
當前提交
1756726fca
共有 9 個文件被更改,包括 129 次插入38 次删除
  1. +4
    -0
      src/base/enum.cpp
  2. +3
    -3
      src/input/controller.cpp
  3. +15
    -6
      src/input/controller.h
  4. +10
    -10
      src/input/input.cpp
  5. +54
    -1
      src/input/input.h
  6. +12
    -0
      src/lol/base/enum.h
  7. +24
    -17
      src/platform/d3d9/d3d9input.cpp
  8. +6
    -1
      src/text.cpp
  9. +1
    -0
      src/text.h

+ 4
- 0
src/base/enum.cpp 查看文件

@@ -17,6 +17,10 @@ namespace lol
* 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> ret;


+ 3
- 3
src/input/controller.cpp 查看文件

@@ -225,7 +225,7 @@ float AxisBinding::RetrieveCurrentValue()

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_name = name;
@@ -236,7 +236,7 @@ Controller::Controller(char const* name, int nb_keys, int nb_axis)
m_active = false;
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);
}
@@ -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)
{


+ 15
- 6
src/input/controller.h 查看文件

@@ -35,10 +35,12 @@ public:
/** 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);
/* 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 */
void ClearBindings();
/** 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 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); }
/* */
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 */
void ClearBindings();
/** 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
{
public:
Controller(char const* name, int nb_keys, int nb_axis);
Controller(String const &name, int nb_keys, int nb_axis);
~Controller();

virtual void TickGame(float seconds);
@@ -137,7 +146,7 @@ public:
KeyBinding& GetKey(int index) { return m_keys[index]; }
AxisBinding& GetAxis(int index) { return m_axis[index]; }

static Controller* Get(char const* name);
static Controller* Get(String const &name);

protected:
array<KeyBinding> m_keys;


+ 10
- 10
src/input/input.cpp 查看文件

@@ -93,19 +93,19 @@ InputDeviceInternal* InputDeviceInternal::CreateStandardKeyboard()
InputDeviceInternal* InputDeviceInternal::CreateStandardMouse()
{
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.
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?)
return mouse;


+ 54
- 1
src/input/input.h 查看文件

@@ -13,8 +13,47 @@
namespace lol
{

const String g_name_max("MAX");
const String g_name_mouse("Mouse");
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
{
@@ -115,6 +154,20 @@ public:
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. */
static void CaptureMouse(bool activated)
{
@@ -146,7 +199,7 @@ protected:

InputDevice(String const &name) : m_name(name)
{
devices.Push(this);
devices.PushUnique(this);
}

~InputDevice()


+ 12
- 0
src/lol/base/enum.h 查看文件

@@ -17,6 +17,18 @@ namespace lol

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>
class SafeEnum : public BASE
{


+ 24
- 17
src/platform/d3d9/d3d9input.cpp 查看文件

@@ -54,23 +54,28 @@ D3d9Input::D3d9Input()
continue;
// TODO: we can put more friendly name here, such as LeftAxisX, ButtonX...
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);
}
@@ -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(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(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++)
{


+ 6
- 1
src/text.cpp 查看文件

@@ -60,7 +60,6 @@ void Text::SetPos(vec3 pos)
data->pos = pos;
}


vec3 Text::GetPos()
{
return (vec3)data->pos;
@@ -71,6 +70,12 @@ void Text::SetAlign(int align)
data->align = align;
}

ivec2 Text::GetFontSize()
{
Font *font = Forge::GetFont(data->font);
return font->GetSize();
}

void Text::TickDraw(float seconds, Scene &scene)
{
Entity::TickDraw(seconds, scene);


+ 1
- 0
src/text.h 查看文件

@@ -33,6 +33,7 @@ public:
void SetPos(vec3 pos);
vec3 GetPos();
void SetAlign(int align);
ivec2 GetFontSize();

enum
{


Loading…
取消
儲存