blob: 7d5c01416fd5d4d929cff4b845385d3857432270 (
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
50
51
52
|
#pragma once
#include "StarVersioningDatabase.hpp"
#include "StarEntity.hpp"
namespace Star {
STAR_CLASS(VersioningDatabase);
STAR_CLASS(PlayerFactory);
STAR_CLASS(MonsterDatabase);
STAR_CLASS(ObjectDatabase);
STAR_CLASS(ProjectileDatabase);
STAR_CLASS(NpcDatabase);
STAR_CLASS(EntityFactory);
STAR_EXCEPTION(EntityFactoryException, StarException);
class EntityFactory {
public:
EntityFactory();
ByteArray netStoreEntity(EntityPtr const& entity, NetCompatibilityRules rules = {}) const;
EntityPtr netLoadEntity(EntityType type, ByteArray const& netStore, NetCompatibilityRules rules = {}) const;
Json diskStoreEntity(EntityPtr const& entity) const;
EntityPtr diskLoadEntity(EntityType type, Json const& diskStore) const;
Json loadVersionedJson(VersionedJson const& versionedJson, EntityType expectedType) const;
VersionedJson storeVersionedJson(EntityType type, Json const& store) const;
// Wraps the normal Json based Entity store / load in a VersionedJson, and
// uses sripts in the VersionedingDatabase to bring the version of the store
// forward to match the current version.
EntityPtr loadVersionedEntity(VersionedJson const& versionedJson) const;
VersionedJson storeVersionedEntity(EntityPtr const& entityPtr) const;
private:
static EnumMap<EntityType> const EntityStorageIdentifiers;
mutable RecursiveMutex m_mutex;
PlayerFactoryConstPtr m_playerFactory;
MonsterDatabaseConstPtr m_monsterDatabase;
ObjectDatabaseConstPtr m_objectDatabase;
ProjectileDatabaseConstPtr m_projectileDatabase;
NpcDatabaseConstPtr m_npcDatabase;
VehicleDatabaseConstPtr m_vehicleDatabase;
VersioningDatabaseConstPtr m_versioningDatabase;
};
}
|