Exemple #1
0
	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;
}