group2 0.1.0
CSE 125 Group 2
Loading...
Searching...
No Matches
PickupGeometry.hpp
Go to the documentation of this file.
1
7
8#pragma once
9
10#include <cmath>
11#include <glm/glm.hpp>
12#include <glm/gtc/constants.hpp>
13
14namespace systems
15{
16
18constexpr float k_pickupRange = 140.0f;
19
21inline const glm::vec3 k_weaponPickupHalfExtents{32.0f, 32.0f, 32.0f};
22
24constexpr float k_pickupMaxAngleDeg = 12.0f;
25
27inline const float k_pickupMinDot = std::cos(glm::radians(k_pickupMaxAngleDeg));
28
30inline bool overlapsAABB(glm::vec3 aPos, glm::vec3 aHalf, glm::vec3 bPos, glm::vec3 bHalf)
31{
32 return std::abs(aPos.x - bPos.x) <= (aHalf.x + bHalf.x) && std::abs(aPos.y - bPos.y) <= (aHalf.y + bHalf.y) &&
33 std::abs(aPos.z - bPos.z) <= (aHalf.z + bHalf.z);
34}
35
37inline glm::vec3 viewForward(float yaw, float pitch)
38{
39 const float cp = std::cos(pitch);
40 return glm::normalize(glm::vec3{
41 std::sin(yaw) * cp,
42 -std::sin(pitch),
43 std::cos(yaw) * cp,
44 });
45}
46
48inline bool isPlayerLookingAtPickup(glm::vec3 eye, glm::vec3 viewFwd, glm::vec3 pickupPos)
49{
50 const glm::vec3 toPickup = pickupPos - eye;
51 const float distSq = glm::dot(toPickup, toPickup);
52 if (distSq > k_pickupRange * k_pickupRange || distSq <= 0.0001f)
53 return false;
54 return glm::dot(viewFwd, glm::normalize(toPickup)) >= k_pickupMinDot;
55}
56
57} // namespace systems
Client-only input sampling system — split into two halves so mouse look can run every iterate() (smoo...
Definition DebugUI.hpp:15
constexpr float k_pickupRange
Maximum distance (units) at which a player can press F to pick up.
Definition PickupGeometry.hpp:18
glm::vec3 viewForward(float yaw, float pitch)
Forward direction implied by a player's yaw + pitch.
Definition PickupGeometry.hpp:37
constexpr float k_pickupMaxAngleDeg
Half-angle (degrees) of the look cone for press-F pickup.
Definition PickupGeometry.hpp:24
bool overlapsAABB(glm::vec3 aPos, glm::vec3 aHalf, glm::vec3 bPos, glm::vec3 bHalf)
Test whether two axis-aligned bounding boxes overlap.
Definition PickupGeometry.hpp:30
const glm::vec3 k_weaponPickupHalfExtents
Shared pickup collision half-extents for weapon spawners and dropped weapons.
Definition PickupGeometry.hpp:21
const float k_pickupMinDot
Pre-computed cosine of the look cone half-angle.
Definition PickupGeometry.hpp:27
bool isPlayerLookingAtPickup(glm::vec3 eye, glm::vec3 viewFwd, glm::vec3 pickupPos)
True if the eye is within range of pickupPos and viewFwd points within the look cone.
Definition PickupGeometry.hpp:48