bool CAnimatedModelsManager::Load(const std::string &Filename) { m_Filename = Filename; std::string l_AnimatedModelName; std::string l_AnimatedModelPath; CXMLTreeNode l_XML; if (l_XML.LoadFile(Filename.c_str())) { CXMLTreeNode l_Input = l_XML["animated_models"]; if (l_Input.Exists()) { for (int i = 0; i < l_Input.GetNumChildren(); ++i) { CXMLTreeNode l_Element = l_Input(i); if (l_Element.GetName() == std::string("animated_model")) { l_AnimatedModelName = l_Element.GetPszProperty("name"); l_AnimatedModelPath = l_Element.GetPszProperty("path"); CAnimatedCoreModel* l_AnimatedCoreModel = new CAnimatedCoreModel(); l_AnimatedCoreModel->Load(l_AnimatedModelPath); AddResource(l_AnimatedModelName,l_AnimatedCoreModel); } } } } else { return false; } return true; }
void CMaterialManager::Load(const std::string &Filename) { m_Filename = Filename; Destroy(); CXMLTreeNode l_XML; if (l_XML.LoadFile(Filename.c_str())) { CXMLTreeNode l_Input = l_XML["materials"]; if (l_Input.Exists()) { for (int i = 0; i < l_Input.GetNumChildren(); ++i) { CXMLTreeNode l_Element = l_Input(i); if (l_Element.GetName() == std::string("material")) { AddResource(l_Element.GetPszProperty("name"),new CMaterial(l_Element)); } } } } }
void CInputManagerImplementation::LoadCommandsFromFile(const std::string& path) { m_FileName = path; m_Actions.clear(); m_Axis.clear(); CXMLTreeNode l_XML; if (l_XML.LoadFile(path.c_str())) { CXMLTreeNode l_Input = l_XML["input"]; if (l_Input.Exists()) { for (int i = 0; i < l_Input.GetNumChildren(); ++i) { CXMLTreeNode l_Element = l_Input(i); if (l_Element.GetName() == std::string("action")) { CXMLTreeNode &l_Action = l_Element; Action action = {}; action.name = l_Action.GetPszProperty("name"); std::string type = l_Action.GetPszProperty("type", "KEYBOARD"); action.inputType = ParseInputType(type); action.mode = ParseMode(l_Action.GetPszProperty("mode", "ON_PRESS", false)); action.triggersAxis = l_Action.GetBoolProperty("triggers_axis", false, false); action.axisName = l_Action.GetPszProperty("axis", "", false); action.axisValue = l_Action.GetFloatProperty("axis_value", 1, false); switch (action.inputType) { case KEYBOARD: action.keyboard.key = l_Action.GetPszProperty("key", "A")[0]; action.keyboard.needsAlt = l_Action.GetBoolProperty("needs_alt", false, false); action.keyboard.needsCtrl = l_Action.GetBoolProperty("needs_ctrl", false, false); break; case MOUSE: action.mouse.button = ParseMouseButton(l_Action.GetPszProperty("mouse_button", "LEFT")); break; // TODO: Mouse y Gamepad // Pista: para parsear botones del gamepad, usad las constantes: // podeis tener más de una a la vez usando "XINPUT_GAMEPAD_A | XINPUT_GAMEPAD_B", por ejemplo. // pero para que eso funcione bién con ON_PRESS tendréis que mejorar la lógica de esta clase o ser frame perfect pulsando botones // XINPUT_GAMEPAD_DPAD_UP // XINPUT_GAMEPAD_DPAD_DOWN // XINPUT_GAMEPAD_DPAD_LEFT // XINPUT_GAMEPAD_DPAD_RIGHT // XINPUT_GAMEPAD_START // XINPUT_GAMEPAD_BACK // XINPUT_GAMEPAD_LEFT_THUMB // XINPUT_GAMEPAD_RIGHT_THUMB // XINPUT_GAMEPAD_LEFT_SHOULDER // XINPUT_GAMEPAD_RIGHT_SHOULDER // XINPUT_GAMEPAD_A // XINPUT_GAMEPAD_B // XINPUT_GAMEPAD_X // XINPUT_GAMEPAD_Y // } m_Actions.push_back(action); } else if (l_Element.GetName() == std::string("axis")) { CXMLTreeNode &l_Axis = l_Element; Axis axis = {}; axis.name = l_Axis.GetPszProperty("name"); std::string type = l_Axis.GetPszProperty("type", "MOUSE"); axis.inputType = ParseInputType(type); switch (axis.inputType) { case GAMEPAD: axis.gamepad.axis = ParseGamepadAxis(l_Axis.GetPszProperty("gamepad_axis", "X")); axis.gamepad.gamepadNumber = l_Axis.GetIntProperty("gamepad_number", 0, false); break; case MOUSE: axis.mouse.axis = ParseMouseAxis(l_Axis.GetPszProperty("mouse_axis", "X")); axis.mouse.scale = l_Axis.GetFloatProperty("mouse_scale", 1, false); break; } m_Axis.push_back(axis); // TODO: parse axis } } } } EndFrame(); }
void CInputManagerImplementation::LoadCommandsFromFile(const std::string& path) { m_Actions.clear(); { Action action = { "MOVE_FWD", KEYBOARD, Action::WHILE_PRESSED }; action.keyboard.key = VK_SHIFT; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; action.triggersAxis = true; action.axisName = "MOVE_FWD"; action.axisValue = 1; m_Actions.push_back(action); } { Action action = { "MOVE_FASTFW", KEYBOARD, Action::WHILE_PRESSED }; action.keyboard.key = 'W'; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; action.triggersAxis = true; action.axisName = "RunAxis"; action.axisValue = 1; m_Actions.push_back(action); } { Action action = { "MOVE_FASTBW", KEYBOARD, Action::WHILE_PRESSED }; action.keyboard.key = 'S'; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; action.triggersAxis = true; action.axisName = "RunAxis"; action.axisValue = -1; m_Actions.push_back(action); } { Action action = { "STRAFE_LEFT", KEYBOARD, Action::WHILE_PRESSED }; action.keyboard.key = 'A'; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; action.triggersAxis = true; action.axisName = "STRAFE"; action.axisValue = -1; m_Actions.push_back(action); } { Action action = { "STRAFE_RIGHT", KEYBOARD, Action::WHILE_PRESSED }; action.keyboard.key = 'D'; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; action.triggersAxis = true; action.axisName = "STRAFE"; action.axisValue = 1; m_Actions.push_back(action); } { Action action = { "JUMP", KEYBOARD, Action::WHILE_PRESSED }; action.keyboard.key = VK_SPACE; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; action.triggersAxis = true; action.axisName = "JUMPAxis"; action.axisValue = 1; m_Actions.push_back(action); } { Action action = { "COACH", KEYBOARD, Action::WHILE_PRESSED }; action.keyboard.key = 'C'; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; action.triggersAxis = true; action.axisName = "JUMPAxis"; action.axisValue = -1; m_Actions.push_back(action); } { Action action = { "SWITCH_CAMERA", KEYBOARD, Action::ON_PRESS }; action.keyboard.key = VK_TAB; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; m_Actions.push_back(action); } { Action action = { "ACTION", KEYBOARD, Action::ON_PRESS }; action.keyboard.key = 'E'; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; m_Actions.push_back(action); } { Action action = { "NEXT_LEVEL_ACTIVE", KEYBOARD, Action::WHILE_PRESSED }; action.keyboard.key = VK_F9; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; m_Actions.push_back(action); } { Action action = { "BACK", KEYBOARD, Action::ON_PRESS }; action.keyboard.key = VK_ESCAPE; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; m_Actions.push_back(action); } { Action action = { "DIVIDE_3_QUARTERS", KEYBOARD, Action::ON_PRESS }; action.keyboard.key = '1'; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; m_Actions.push_back(action); } { Action action = { "DIVIDE_1_HALF", KEYBOARD, Action::ON_PRESS }; action.keyboard.key = '2'; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; m_Actions.push_back(action); } { Action action = { "DIVIDE_1_QUARTER", KEYBOARD, Action::ON_PRESS }; action.keyboard.key = '3'; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; m_Actions.push_back(action); } { Action action = { "REUNITE", KEYBOARD, Action::ON_PRESS }; action.keyboard.key = '4'; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; m_Actions.push_back(action); } { Action action = { "MULTI_CONTROL_TOGGLE", KEYBOARD, Action::ON_PRESS }; action.keyboard.key = 'T'; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; m_Actions.push_back(action); } { Action action = { "THROW_DIVISION", KEYBOARD, Action::ON_PRESS }; action.keyboard.key = 'G'; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; m_Actions.push_back(action); } { Action action = { "FIXCAMERA", KEYBOARD, Action::ON_PRESS }; action.keyboard.key = 'P'; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; action.triggersAxis = true; action.axisValue = -1; action.axisName = "FIXED_CAMERA"; m_Actions.push_back(action); } { Action action = { "MOUSE_PRESSED", MOUSE, Action::ON_PRESS }; action.mouse.button = Action::LEFT; m_Actions.push_back(action); } { Action action = { "MOUSE_DOWN", MOUSE, Action::WHILE_PRESSED }; action.mouse.button = Action::LEFT; m_Actions.push_back(action); } { Action action = { "MOUSE_RELEASED", MOUSE, Action::ON_RELEASE }; action.mouse.button = Action::LEFT; m_Actions.push_back(action); } { Action action = { "MOVE_CAMERA", MOUSE, Action::WHILE_PRESSED }; action.mouse.button = Action::RIGHT; m_Actions.push_back(action); } { Axis axis = { "X_AXIS", MOUSE }; axis.mouse.axis = MouseAxis::X; axis.mouse.scale = 0.05f; m_Axis.push_back(axis); } { Axis axis = { "Y_AXIS", MOUSE }; axis.mouse.axis = MouseAxis::Y; axis.mouse.scale = 0.01f; m_Axis.push_back(axis); } { Axis axis = { "ZOOM", MOUSE }; axis.mouse.axis = MouseAxis::WHEEL; axis.mouse.scale = 0.05f; m_Axis.push_back(axis); } { Axis axis = { "X_AXIS", GAMEPAD }; axis.gamepad.axis = GamepadAxis::LEFT_X; axis.gamepad.gamepadNumber = 0; m_Axis.push_back(axis); } { Axis axis = { "Y_AXIS", GAMEPAD }; axis.gamepad.axis = GamepadAxis::LEFT_Y; axis.gamepad.gamepadNumber = 0; m_Axis.push_back(axis); } //*/ CXMLTreeNode l_XML; if (l_XML.LoadFile(path.c_str())) { CXMLTreeNode l_Input = l_XML["input"]; if (l_Input.Exists()) { for (int i = 0; i < l_Input.GetNumChildren(); ++i) { CXMLTreeNode l_Element = l_Input(i); if (l_Element.GetName() == std::string("action")) { CXMLTreeNode &l_Action = l_Element; Action action = {}; action.name = l_Action.GetPszProperty("name"); std::string type = l_Action.GetPszProperty("type", "KEYBOARD"); action.inputType = ParseInputType(type); action.mode = ParseMode(l_Action.GetPszProperty("mode", "ON_PRESS", false)); action.triggersAxis = l_Action.GetBoolProperty("triggers_axis", false, false); action.axisName = l_Action.GetPszProperty("axis", "", false); action.axisValue = l_Action.GetFloatProperty("axis_value", 1, false); switch (action.inputType) { case KEYBOARD: action.keyboard.key = l_Action.GetPszProperty("key", "A")[0]; action.keyboard.needsAlt = l_Action.GetBoolProperty("needs_alt", false, false); action.keyboard.needsCtrl = l_Action.GetBoolProperty("needs_ctrl", false, false); break; case MOUSE: { auto key = l_Action.GetPszProperty("key", "LEFT"); if (key == "RIGHT") { action.mouse.button = Action::MouseButton::RIGHT; } else if (key == "CENTER") { action.mouse.button = Action::MouseButton::CENTER; } else { action.mouse.button = Action::MouseButton::LEFT; } break; } // TODO: Mouse y Gamepad // Pista: para parsear botones del gamepad, usad las constantes: // podeis tener más de una a la vez usando "XINPUT_GAMEPAD_A | XINPUT_GAMEPAD_B", por ejemplo. // pero para que eso funcione bién con ON_PRESS tendréis que mejorar la lógica de esta clase o ser frame perfect pulsando botones // XINPUT_GAMEPAD_DPAD_UP // XINPUT_GAMEPAD_DPAD_DOWN // XINPUT_GAMEPAD_DPAD_LEFT // XINPUT_GAMEPAD_DPAD_RIGHT // XINPUT_GAMEPAD_START // XINPUT_GAMEPAD_BACK // XINPUT_GAMEPAD_LEFT_THUMB // XINPUT_GAMEPAD_RIGHT_THUMB // XINPUT_GAMEPAD_LEFT_SHOULDER // XINPUT_GAMEPAD_RIGHT_SHOULDER // XINPUT_GAMEPAD_A // XINPUT_GAMEPAD_B // XINPUT_GAMEPAD_X // XINPUT_GAMEPAD_Y // } m_Actions.push_back(action); } else if (l_Element.GetName() == std::string("axis")) { // TODO: parse axis } } } } //*/ EndFrame(); }
void CInputManagerImplementation::LoadCommandsFromFile(const std::string& path) { m_Actions.clear(); /* { Action action = { "MOVE_LEFT", Action::KEYBOARD }; action.keyboard.mode = Action::WHILE_PRESSED; action.keyboard.key = 'A'; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; m_Actions.push_back(action); } { Action action = { "MOVE_RIGHT", Action::KEYBOARD }; action.keyboard.mode = Action::WHILE_PRESSED; action.keyboard.key = 'D'; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; m_Actions.push_back(action); } { Action action = { "MOVE_UP", Action::KEYBOARD }; action.keyboard.mode = Action::WHILE_PRESSED; action.keyboard.key = 'W'; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; m_Actions.push_back(action); } { Action action = { "MOVE_DOWN", Action::KEYBOARD }; action.keyboard.mode = Action::WHILE_PRESSED; action.keyboard.key = 'S'; action.keyboard.needsAlt = false; action.keyboard.needsCtrl = false; m_Actions.push_back(action); } */ CXMLTreeNode l_XML; if (l_XML.LoadFile(path.c_str())) { CXMLTreeNode l_Input = l_XML["input"]; if (l_Input.Exists()) { for (int i = 0; i < l_Input.GetNumChildren(); ++i) { CXMLTreeNode l_Action = l_Input(i); Action action = {}; action.name = l_Action.GetPszProperty("name"); std::string type = l_Action.GetPszProperty("type", "KEYBOARD"); action.inputType = ParseInputType(type); switch (action.inputType) { case Action::KEYBOARD: action.keyboard.mode = ParseMode(l_Action.GetPszProperty("mode", "ON_PRESS")); action.keyboard.key = l_Action.GetPszProperty("key", "A")[0]; action.keyboard.needsAlt = l_Action.GetBoolProperty("needs_alt", false, false); action.keyboard.needsCtrl = l_Action.GetBoolProperty("needs_ctrl", false, false); break; } m_Actions.push_back(action); } } } //*/ EndFrame(); }