Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
CreatureAIFactory.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef SKYFIRE_CREATUREAIFACTORY_H
7#define SKYFIRE_CREATUREAIFACTORY_H
8
9//#include "Policies/Singleton.h"
10#include "FactoryHolder.h"
11#include "GameObjectAI.h"
12#include "ObjectRegistry.h"
13
14struct SelectableAI : public FactoryHolder<CreatureAI>, public Permissible<Creature>
15{
16 SelectableAI(const char* id) : FactoryHolder<CreatureAI>(id) { }
17};
18
19template<class REAL_AI>
21{
22 CreatureAIFactory(const char* name) : SelectableAI(name) { }
23
24 CreatureAI* Create(void*) const;
25
26 int Permit(const Creature* c) const { return REAL_AI::Permissible(c); }
27};
28
29template<class REAL_AI>
30inline CreatureAI*
32{
33 Creature* creature = reinterpret_cast<Creature*>(data);
34 return (new REAL_AI(creature));
35}
36
40
41//GO
42struct SelectableGameObjectAI : public FactoryHolder<GameObjectAI>, public Permissible<GameObject>
43{
45};
46
47template<class REAL_GO_AI>
49{
50 GameObjectAIFactory(const char* name) : SelectableGameObjectAI(name) { }
51
52 GameObjectAI* Create(void*) const;
53
54 int Permit(const GameObject* g) const { return REAL_GO_AI::Permissible(g); }
55};
56
57template<class REAL_GO_AI>
58inline GameObjectAI*
60{
61 GameObject* go = reinterpret_cast<GameObject*>(data);
62 return (new REAL_GO_AI(go));
63}
64
68#endif
FactoryHolder< CreatureAI > CreatureAICreator
FactoryHolder< GameObjectAI > GameObjectAICreator
FactoryHolder< CreatureAI >::FactoryHolderRegistry CreatureAIRegistry
FactoryHolder< GameObjectAI >::FactoryHolderRegistry GameObjectAIRegistry
FactoryHolder< CreatureAI >::FactoryHolderRepository CreatureAIRepository
FactoryHolder< GameObjectAI >::FactoryHolderRepository GameObjectAIRepository
Skyfire::Singleton< FactoryHolderRegistry, Skyfire::NullMutex > FactoryHolderRepository
ObjectRegistry< FactoryHolder< T, Key >, Key > FactoryHolderRegistry
CreatureAI * Create(void *) const
Abstract Factory create method.
int Permit(const Creature *c) const
CreatureAIFactory(const char *name)
GameObjectAIFactory(const char *name)
int Permit(const GameObject *g) const
GameObjectAI * Create(void *) const
Abstract Factory create method.
SelectableAI(const char *id)
SelectableGameObjectAI(const char *id)