File: object_instance.h

package info (click to toggle)
freespace2 25.0.0~rc11%2Brepack-1
  • links: PTS, VCS
  • area: non-free
  • in suites: forky, sid
  • size: 47,232 kB
  • sloc: cpp: 657,500; ansic: 22,305; sh: 293; python: 200; makefile: 198; xml: 181
file content (30 lines) | stat: -rw-r--r-- 1,175 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#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;
}