void GameStage::OnCreate() { try { //物理計算有効 SetPhysicsActive(true); //ビューとライトの作成 CreateViewLight(); //下の台 AddGameObject<FixedPsBox>(Vec3(30.0f, 1.0f, 30.0f), Quat(), Vec3(0.0f, -0.5f, 0.0f)); //ラグドール CreateRagdoll(); //プレーヤーの作成 CreatePlayer(); } catch (...) { throw; } }
// Poll Events void Game::PollEvents() { // For every passive tool and the current tool. int toolcount = passivetools.size(); if (currentTool >= 0 && currentTool < tools.size()) toolcount++; Tool** tools = new Tool*[toolcount]; for (int i = 0; i < passivetools.size(); ++i) { tools[i] = passivetools[i]; } if (toolcount > passivetools.size()) tools[passivetools.size()] = GetToolList()[currentTool]; // Keep track of the last mouse position. static sf::Vector2i lastmousepos = sf::Mouse::getPosition(window); // Handle events sf::Event event; while (window.pollEvent(event)) { // Window closed or escape key pressed : exit if ((event.type == sf::Event::Closed) || ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape))) { window.close(); break; } else if (event.type == sf::Event::Resized) { OnResize(event.size.width, event.size.height); } // Pause / Unpause physics if (event.type == sf::Event::KeyReleased) { if (event.key.code == sf::Keyboard::Space) { SetPhysicsActive(!GetPhysiscActive()); } } // Process the event with gwen. if (!gwenInput.ProcessMessage(event)) { // Make sure this message is relevant. if (event.type == sf::Event::MouseButtonPressed || event.type == sf::Event::MouseButtonReleased) { // Figure out the position sf::Vector2i mousepos(event.mouseButton.x, event.mouseButton.y); // Convert to world coordinates. sf::Vector2f pos = window.mapPixelToCoords(mousepos); // Get entity at a position Entity* entity = GetEntityAt(pos); // Loop through each tool. for (int i = 0; i < toolcount; ++i) { // Report to the tool. if (event.type == sf::Event::MouseButtonPressed) { tools[i]->OnPress(entity, pos, event.mouseButton.button); // Add event. toolevents.push_back(ToolEvent(ToolEvent::PRESS, event.mouseButton.button, pos, currentTool)); } if (event.type == sf::Event::MouseButtonReleased) { tools[i]->OnRelease(entity, pos, event.mouseButton.button); // Add event. toolevents.push_back(ToolEvent(ToolEvent::RELEASE, event.mouseButton.button, pos, currentTool)); } } } // Detect drags if (event.type == sf::Event::MouseMoved) { for (int i = 0; i < toolcount; ++i) { // Get how much the mouse moved. sf::Vector2i delta = sf::Vector2i(event.mouseMove.x, event.mouseMove.y) - lastmousepos; sf::Vector2f deltaf(delta.x, delta.y); // Check if any mouse button is pressed. if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Left)) { tools[i]->OnDrag(deltaf, sf::Mouse::Button::Left); // Add event. toolevents.push_back(ToolEvent(ToolEvent::DRAG, sf::Mouse::Button::Left, deltaf, currentTool)); } if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Middle)) { tools[i]->OnDrag(deltaf, sf::Mouse::Button::Middle); // Add event. toolevents.push_back(ToolEvent(ToolEvent::DRAG, sf::Mouse::Button::Middle, deltaf, currentTool)); } if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Right)) { tools[i]->OnDrag(deltaf, sf::Mouse::Button::Right); // Add event. toolevents.push_back(ToolEvent(ToolEvent::DRAG, sf::Mouse::Button::Right, deltaf, currentTool)); } } } // Detect scrolling if (event.type == sf::Event::MouseWheelMoved) { for (int i = 0; i < toolcount; ++i) { tools[i]->OnScroll(event.mouseWheel.delta); } } } } // Update the mouse pos. lastmousepos = sf::Mouse::getPosition(window); // Delete tool list delete tools; }