Files
BMagnu 3c939f5cc4 Particle Curves with access to host object & ship properties (#7047)
* Add parent / host input curves

* reorder some includes to allow particles access to ship.h

* Allow modular_curves to deal with functions returning optionals

* Add convenience function to return an optional from an objp and an instance type

* Add a bunch of particle curve inputs

* Fix internal linkage warning

* Add hitpoint and shield fraction (albeit limited to ships)
2025-09-21 02:52:22 +02:00

31 lines
1.1 KiB
C++

#pragma once
#include <optional>
#include "asteroid/asteroid.h"
#include "debris/debris.h"
#include "fireball/fireballs.h"
#include "object/object.h"
#include "ship/ship.h"
#include "weapon/weapon.h"
template<int type>
inline auto obj_get_instance_maybe(const object* objp) {
if constexpr(type == OBJ_SHIP)
return objp->type == type ? std::optional(&Ships[objp->instance]) : std::nullopt;
else if constexpr(type == OBJ_WEAPON)
return objp->type == type ? std::optional(&Weapons[objp->instance]) : std::nullopt;
else if constexpr(type == OBJ_FIREBALL)
return objp->type == type ? std::optional(&Fireballs[objp->instance]) : std::nullopt;
else if constexpr(type == OBJ_DEBRIS)
return objp->type == type ? std::optional(&Debris[objp->instance]) : std::nullopt;
else if constexpr(type == OBJ_WING)
return objp->type == type ? std::optional(&Wings[objp->instance]) : std::nullopt;
else if constexpr(type == OBJ_ASTEROID)
return objp->type == type ? std::optional(&Asteroids[objp->instance]) : std::nullopt;
else if constexpr(type == OBJ_BEAM)
return objp->type == type ? std::optional(&Beams[objp->instance]) : std::nullopt;
else
return std::nullopt;
}