Skip to content

Commit ac3071f

Browse files
author
L'In20Cible
committed
BaseEntityOutput is now wrapped on the c++ side.
Added entities.EventActionGenerator. Added BaseEntityOutput.event_actions that returns an EventActionGenerator. Added BaseEntity.get_output that returns the BaseEntityOutput instance matching the given name.
1 parent 678cbd0 commit ac3071f

File tree

15 files changed

+177
-62
lines changed

15 files changed

+177
-62
lines changed

addons/source-python/data/source-python/entity_output/blade/CBaseEntityOutput.ini

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,6 @@
33
binary = server
44
srv_check = False
55

6-
[instance_attribute]
7-
[[variant]]
8-
type = POINTER
9-
offset = 0
10-
11-
[[event_action]]
12-
type = POINTER
13-
offset = 20
14-
15-
166
[function]
177
[[fire_output]]
188
identifier_linux = _ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f

addons/source-python/data/source-python/entity_output/bms/CBaseEntityOutput.ini

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,6 @@
22

33
binary = server
44

5-
[instance_attribute]
6-
[[variant]]
7-
type = POINTER
8-
offset = 0
9-
10-
[[event_action]]
11-
type = POINTER
12-
offset = 20
13-
14-
155
[function]
166
[[fire_output]]
177
identifier_linux = _ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f

addons/source-python/data/source-python/entity_output/csgo/CBaseEntityOutput.ini

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,6 @@
33
binary = server
44
srv_check = False
55

6-
[instance_attribute]
7-
[[variant]]
8-
type = POINTER
9-
offset = 0
10-
11-
[[event_action]]
12-
type = POINTER
13-
offset = 20
14-
15-
166
[function]
177
[[fire_output]]
188
# identifier_linux = _ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f

addons/source-python/data/source-python/entity_output/gmod/CBaseEntityOutput.ini

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,6 @@
22

33
binary = server
44

5-
[instance_attribute]
6-
[[variant]]
7-
type = POINTER
8-
offset = 0
9-
10-
[[event_action]]
11-
type = POINTER
12-
offset = 20
13-
14-
155
[function]
166
[[fire_output]]
177
identifier_linux = _ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f

addons/source-python/data/source-python/entity_output/l4d2/CBaseEntityOutput.ini

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,6 @@
22

33
binary = server
44

5-
[instance_attribute]
6-
[[variant]]
7-
type = POINTER
8-
offset = 0
9-
10-
[[event_action]]
11-
type = POINTER
12-
offset = 20
13-
14-
155
[function]
166
[[fire_output]]
177
identifier_linux = _ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f

addons/source-python/data/source-python/entity_output/orangebox/CBaseEntityOutput.ini

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,6 @@
22

33
binary = server
44

5-
[instance_attribute]
6-
[[variant]]
7-
type = POINTER
8-
offset = 0
9-
10-
[[event_action]]
11-
type = POINTER
12-
offset = 20
13-
14-
155
[function]
166
[[fire_output]]
177
identifier_linux = _ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f

addons/source-python/packages/source-python/__init__.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,12 +154,15 @@ def setup_data():
154154
GameConfigObj(SP_DATA_PATH / 'client' / 'CBaseClient.ini'))
155155

156156
import entities
157-
entities.BaseEntityOutput = manager.create_type_from_dict(
157+
entities._BaseEntityOutput = manager.create_type_from_dict(
158158
'BaseEntityOutput',
159159
GameConfigObj(SP_DATA_PATH / 'entity_output' / 'CBaseEntityOutput.ini'))
160160

161161
try:
162-
_fire_output = entities.BaseEntityOutput.fire_output
162+
_fire_output = entities._BaseEntityOutput.fire_output
163+
164+
from _entities import BaseEntityOutput
165+
BaseEntityOutput.fire_output = _fire_output
163166
except AttributeError:
164167
from warnings import warn
165168
warn(

addons/source-python/packages/source-python/entities/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@
1717
# Entities
1818
from _entities import BaseEntityGenerator
1919
from _entities import BaseEntityHandle
20+
from _entities import BaseEntityOutput
2021
from _entities import CheckTransmitInfo
2122
from _entities import Collideable
2223
from _entities import Edict
2324
from _entities import EntityGenerator
2425
from _entities import EntityListener
2526
from _entities import EventAction
27+
from _entities import EventActionGenerator
2628
from _entities import GlobalEntityList
2729
from _entities import HandleEntity
2830
from _entities import ServerClassGenerator
@@ -44,6 +46,7 @@
4446
'EntityGenerator',
4547
'EntityListener',
4648
'EventAction',
49+
'EventActionGenerator',
4750
'GlobalEntityList',
4851
'HandleEntity',
4952
'ServerClassGenerator',

src/core/modules/entities/entities.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include "modules/memory/memory_tools.h"
3434
#include "utilities/conversions.h"
3535
#include "entities_entity.h"
36+
#include "entities_generator.h"
3637

3738
// SDK
3839
#include "edict.h"
@@ -246,4 +247,31 @@ class EventActionExt
246247
}
247248
};
248249

250+
251+
//-----------------------------------------------------------------------------
252+
// CBaseEntityOutput wrapper class.
253+
//-----------------------------------------------------------------------------
254+
class CBaseEntityOutputWrapper: public CBaseEntityOutput
255+
{
256+
public:
257+
static CEventAction *get_event_action(CBaseEntityOutputWrapper *pBaseEntityOutput)
258+
{
259+
return pBaseEntityOutput->m_ActionList;
260+
}
261+
262+
static void set_event_action(CBaseEntityOutputWrapper *pBaseEntityOutput, CEventAction *pEventAction)
263+
{
264+
pBaseEntityOutput->m_ActionList = pEventAction;
265+
}
266+
267+
static object get_event_actions(CBaseEntityOutputWrapper *pBaseEntityOutput)
268+
{
269+
return import("_entities").attr("EventActionGenerator")(boost::ref(pBaseEntityOutput->m_ActionList));
270+
}
271+
272+
public:
273+
using CBaseEntityOutput::m_Value;
274+
using CBaseEntityOutput::m_ActionList;
275+
};
276+
249277
#endif // _ENTITIES_H

src/core/modules/entities/entities_entity.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,31 @@ CBaseEntity* CBaseEntityWrapper::find_or_create(const char* name)
9595
return entity;
9696
}
9797

98+
CBaseEntityOutputWrapper* CBaseEntityWrapper::get_output(const char* name)
99+
{
100+
// TODO: Caching?
101+
datamap_t* pDatamap = GetDataDescMap();
102+
while (pDatamap)
103+
{
104+
for (int iCurrentIndex=0; iCurrentIndex < pDatamap->dataNumFields; ++iCurrentIndex)
105+
{
106+
typedescription_t& pCurrentDataDesc = pDatamap->dataDesc[iCurrentIndex];
107+
if (pCurrentDataDesc.externalName && strcmp(name, pCurrentDataDesc.externalName) == 0)
108+
{
109+
if (!(pCurrentDataDesc.flags & FTYPEDESC_OUTPUT))
110+
BOOST_RAISE_EXCEPTION(PyExc_TypeError, "'%s' is not a valid output.", name);
111+
112+
return (CBaseEntityOutputWrapper *)((unsigned long)this + TypeDescriptionExt::get_offset(pCurrentDataDesc));
113+
}
114+
}
115+
116+
pDatamap = pDatamap->baseMap;
117+
}
118+
119+
BOOST_RAISE_EXCEPTION(PyExc_ValueError, "Failed to retrieve offset of '%s'.", name);
120+
return NULL;
121+
}
122+
98123
IEntityFactory* CBaseEntityWrapper::get_factory(const char* name)
99124
{
100125
IEntityFactory* pFactory = GetEntityFactoryDictionary()->FindFactory(name);

0 commit comments

Comments
 (0)