void AimHelperHudget::calculateTargetPoint(WorldObject* targetObject) { int hitableHardpointCount = 0; Ship* ship = m_hud->player()->ship(); if (!ship) { return; } m_targetPoint = glm::vec3(0.0f, 0.0f, 0.0f); for (std::shared_ptr<Hardpoint> hardpoint : ship->components().hardpoints()) { if (!hardpoint->weapon()) { continue; } if (hardpoint->weapon()->type() != WeaponType::Gun) { continue; } HardpointAimHelper aimHelper(hardpoint.get(), targetObject); aimHelper.aim(); if (aimHelper.isHittable()) { m_targetPoint += aimHelper.point(); hitableHardpointCount++; } } if (hitableHardpointCount > 0) { setVisible(true); m_targetPoint /= hitableHardpointCount; } else { setVisible(false); } }
void PlayerSystem::onMouseButtonDown(MouseStateEvent & event) { if (!m_player.isValid()) return; if (m_cameraMode == CameraMode::Normal) { if (event.button(MouseButton::Left)) { const auto &mouse = event.mousePosition(); m_angularThrust.x = mouse.y; m_angularThrust.y = -mouse.x; } if (event.button(MouseButton::Right)) { AimHelper aimHelper(GetGlobal<RenderManager>()->mainCamera(), m_physicsWorld); auto result = aimHelper.getTarget(GetGlobal<InputManager>()->mousePosition()); auto &body = *m_player.component<RigidBodyComponent>().value(); auto &equipment = m_player.component<Equipment>(); const auto &equipmentTransform = m_player.component<Transform3DComponent>().transform(); equipment.setFireRequestTargetForAllHardpoints( equipmentTransform, body.linearVelocity(), result.pointOfImpact, glm::vec3(0.0f)); } } }
void PlayerSystem::onMouseMotion(MouseMotionEvent & event) { AimHelper aimHelper(GetGlobal<RenderManager>()->mainCamera(), m_physicsWorld); auto result = aimHelper.getTarget(GetGlobal<InputManager>()->mousePosition()); if (m_cameraMode == CameraMode::FreeFlight) { m_navigator.onMouseMotion(event); } }