summaryrefslogtreecommitdiff
path: root/src/Game/Actor/actPlayerCreateTrace.h
blob: 8614b2779e59275499aa779a68b98c1ec63aa693 (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
41
42
43
44
45
46
47
48
49

#pragma once

#include <prim/seadSafeString.h>
#include "KingSystem/Utils/Types.h"

namespace uking::act {

// This is used in CreatePlayerEquipActorMgr and CreatePlayerTrashActorMgr
// and nowhere else. It's completely stubbed out, so the implementation is purely by usage-based
// guess

// This exists because makeScope doesn't match
// when made an inlined function in PlayerCreateTracer
// i.e. tracer.trace()->makeScope() matches but not tracer.makeScope()
class PlayerCreateTrace;

class PlayerCreateTraceScope {
public:
    PlayerCreateTraceScope(PlayerCreateTrace* trace, const sead::SafeString& name,
                           const sead::SafeString& caller, s32 level);
    virtual ~PlayerCreateTraceScope();

private:
    PlayerCreateTrace* mTrace = nullptr;
};
KSYS_CHECK_SIZE_NX150(PlayerCreateTraceScope, 0x10);

class PlayerCreateTrace {
public:
    PlayerCreateTraceScope makeScope(const sead::SafeString& name, const sead::SafeString& caller,
                                     s32 level) {
        return {this, name, caller, level};
    }
    static PlayerCreateTrace* make(const sead::SafeString& name, s32 level);
};

class PlayerCreateTracer {
public:
    void init(const sead::SafeString& name) { mTrace = PlayerCreateTrace::make(name, 0); }
    void finish();
    PlayerCreateTrace* trace() { return mTrace; }

private:
    PlayerCreateTrace* mTrace = nullptr;
};
KSYS_CHECK_SIZE_NX150(PlayerCreateTracer, 0x8);

}  // namespace uking::act