blob: 676a8a73b2cc0b4165a99195286e37401a39c0a6 (
plain)
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
31
32
33
34
35
36
37
38
39
40
|
#pragma once
namespace floormat {
struct critter;
struct Ns;
struct base_script
{
virtual ~base_script() noexcept;
virtual void delete_self() = 0;
base_script() noexcept;
};
template<typename T>
class script_wrapper final
{
static_assert(std::is_base_of_v<base_script, T>);
T* ptr;
public:
explicit script_wrapper(T* ptr);
~script_wrapper() noexcept;
const T& operator*() const noexcept;
T& operator*() noexcept;
const T* operator->() const noexcept;
T* operator->() noexcept;
};
struct critter_script : base_script
{
critter_script(critter& c);
virtual void update(critter& c, size_t& i, const Ns& dt) = 0;
// todo can_activate, activate
};
extern template class script_wrapper<critter_script>;
} // namespace floormat
|