LeviLamina
Loading...
Searching...
No Matches
CircuitSceneGraph.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4#include "mc/world/level/BlockPos.h"
5
6// auto generated inclusion list
7#include "mc/world/level/BlockPos.h"
8#include "mc/world/redstone/circuit/components/CircuitComponentType.h"
9
10// auto generated forward declare list
11// clang-format off
13class BlockSource;
14class ChunkPos;
17// clang-format on
18
19class CircuitSceneGraph {
20public:
21 // CircuitSceneGraph inner types declare
22 // clang-format off
23 class PendingEntry;
24 // clang-format on
25
26 // CircuitSceneGraph inner types define
28 public:
29 // member variables
30 // NOLINTBEGIN
31 ::ll::TypedStorage<8, 8, ::BaseCircuitComponent*> mRawComponentPtr;
32 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::BaseCircuitComponent>> mComponent;
33 ::ll::TypedStorage<4, 12, ::BlockPos> mPos;
34 // NOLINTEND
35 };
36
37 using ComponentMap = ::std::unordered_map<::BlockPos, ::std::unique_ptr<::BaseCircuitComponent>>;
38
39 using ComponentsPerChunkMap = ::std::unordered_map<::BlockPos, ::ChunkCircuitComponentList>;
40
41 using ComponentsPerPosMap = ::std::unordered_map<::BlockPos, ::CircuitComponentList>;
42
43public:
44 // member variables
45 // NOLINTBEGIN
46 ComponentMap mAllComponents;
47 ComponentsPerChunkMap mActiveComponentsPerChunk;
48 ComponentsPerPosMap mPowerAssociationMap;
49 ::std::unordered_map<::BlockPos, ::CircuitSceneGraph::PendingEntry> mPendingAdds;
50 ::std::unordered_map<::BlockPos, ::CircuitSceneGraph::PendingEntry> mPendingUpdates;
51 ::std::unordered_map<::BlockPos, ::std::vector<::BlockPos>> mComponentsToReEvaluate;
52 ::std::vector<::CircuitSceneGraph::PendingEntry> mPendingRemoves;
53 // NOLINTEND
54
55public:
56 // member functions
57 // NOLINTBEGIN
58 MCAPI CircuitSceneGraph();
59
60 MCAPI void add(::BlockPos const& pos, ::std::unique_ptr<::BaseCircuitComponent> component);
61
62 MCAPI ::BaseCircuitComponent* addIfPoweredBlockAt(::BlockSource& source, ::BlockPos const& pos);
63
64 MCAPI void findRelationships(::BlockPos const& pos, ::BaseCircuitComponent* producerTarget, ::BlockSource* region);
65
66 MCAPI ::BaseCircuitComponent* getBaseComponent(::BlockPos const& pos);
67
68 MCAPI ::BaseCircuitComponent* getComponent(::BlockPos const& pos, ::CircuitComponentType typeID);
69
70 MCAPI ::BaseCircuitComponent* getFromPendingAdd(::BlockPos const& pos, ::CircuitComponentType typeID);
71
72 MCAPI void invalidatePos(::BlockPos const& pos);
73
74 MCAPI void preSetupPoweredBlocks(::ChunkPos const& chunkPos);
75
76 MCAPI void processPendingAdds();
77
78 MCAPI void remove(::BlockPos const& pos, ::BaseCircuitComponent* component);
79
80 MCAPI void removeComponent(::BlockPos const& pos);
81
82 MCAPI void removeStaleRelationships();
83
84 MCAPI void update(::BlockSource* region);
85
86 MCAPI ~CircuitSceneGraph();
87 // NOLINTEND
88
89public:
90 // constructor thunks
91 // NOLINTBEGIN
92 MCAPI void* $ctor();
93 // NOLINTEND
94
95public:
96 // destructor thunk
97 // NOLINTBEGIN
98 MCAPI void $dtor();
99 // NOLINTEND
100};
Definition BaseCircuitComponent.h:19
Definition BlockPos.h:21
Definition BlockSource.h:73
Definition ChunkPos.h:11
Definition CircuitComponentList.h:14
Definition CircuitSceneGraph.h:27
Definition ChunkCircuitComponentList.h:14