summaryrefslogtreecommitdiffhomepage
path: root/src/critter-script.hpp
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