Example #1
0
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);
    }
}
Example #2
0
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));
        }
    }
}
Example #3
0
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);
    }
}