Skip to content

Commit 87ec564

Browse files
committed
Implement plugin system in python
1 parent 225dc36 commit 87ec564

File tree

14 files changed

+2025
-22
lines changed

14 files changed

+2025
-22
lines changed

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,3 +132,9 @@ Thumbs.db
132132
/MSVC/HoldTheFlag_Win32_Debug/*.ib_pdb_index
133133
*.ib_pdb_index
134134

135+
# Python things
136+
__pycache__
137+
138+
# vi files
139+
*~
140+
*.swp

configure.ac

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,16 @@ MP_WITH_CURSES
130130
# build the server?
131131
AC_ARG_ENABLE(server, AS_HELP_STRING([--disable-server],[do not compile server]))
132132

133+
# check whether python plugins are desired
134+
AC_ARG_ENABLE(python, AS_HELP_STRING([--disable-python],[do not compile python support]))
135+
if test "x$enable_python" != xno ; then
136+
if test "x$enable_server" != xno ; then
137+
AM_PATH_PYTHON([3.8])
138+
AC_DEFINE(BZ_PYTHON, 1, [Enable python])
139+
fi
140+
fi
141+
AM_CONDITIONAL(BUILD_PLUGINS, test "x$enable_plugins" != "xno")
142+
133143
# check whether plugins are desired
134144
AC_ARG_ENABLE(plugins, AS_HELP_STRING([--disable-plugins],[do not compile plugins]))
135145
if test "x$enable_plugins" != xno ; then

python/bzBasic.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from enum import IntEnum
2+
3+
class bz_PlayerUpdateState():
4+
pass
5+
6+
class bz_eTeamType(IntEnum):
7+
eNoTeam = -1
8+
eRogueTeam = 0
9+
eRedTeam = 1
10+
eGreenTeam = 2
11+
eBlueTeam = 3
12+
ePurpleTeam = 4
13+
eRabbitTeam = 5
14+
eHunterTeam = 6
15+
eObservers = 7
16+
eAdministrators = 8

python/bzEvents.py

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
from bzBasic import *
2+
3+
bz_eGetPlayerSpawnPosEvent = 1
4+
bz_eTickEvent = 2
5+
bz_eRawChatMessageEvent = 3
6+
bz_eFlagTransferredEvent = 4
7+
bz_eFlagGrabbedEvent = 5
8+
bz_eFlagDroppedEvent = 6
9+
bz_eShotFiredEvent = 7
10+
bz_ePlayerDieEvent = 8
11+
bz_ePlayerUpdateEvent = 9
12+
bz_eAllowFlagGrab = 10
13+
bz_ePlayerJoinEvent = 11
14+
bz_ePlayerPartEvent = 12
15+
16+
class bz_EventData():
17+
def __init__(self, eventType):
18+
self.eventType = eventType
19+
20+
class bz_TickEventData_V1 (bz_EventData):
21+
def __init__(self):
22+
super().__init__(bz_eTickEvent)
23+
24+
class bz_GetPlayerSpawnPosEventData_V1 (bz_EventData):
25+
def __init__(self, pos):
26+
super().__init__(bz_eGetPlayerSpawnPosEvent)
27+
self.pos = pos
28+
29+
class bz_ChatEventData_V1 (bz_EventData):
30+
def __init__(self, fromPlayer, message):
31+
super().__init__(bz_eRawChatMessageEvent)
32+
self.fromPlayer = fromPlayer
33+
self.message = message
34+
35+
class bz_FlagTransferredEventData_V1 (bz_EventData):
36+
def __init__(self, flagType):
37+
super().__init__(bz_eFlagTransferredEvent)
38+
self.flagType = flagType
39+
40+
class bz_FlagGrabbedEventData_V1 (bz_EventData):
41+
def __init__(self, flagType):
42+
super().__init__(bz_eFlagGrabbedEvent)
43+
self.flagType = flagType
44+
45+
class bz_FlagDroppedEventData_V1 (bz_EventData):
46+
def __init__(self, flagType):
47+
super().__init__(bz_eFlagDroppedEvent)
48+
self.flagType = flagType
49+
50+
class bz_ShotFiredEventData_V1 (bz_EventData):
51+
def __init__(self, playerID):
52+
super().__init__(bz_eShotFiredEvent)
53+
self.playerID = playerID
54+
55+
class bz_PlayerDieEventData_V2 (bz_EventData):
56+
def __init__(self, playerID, flagKilledWith):
57+
super().__init__(bz_ePlayerDieEvent)
58+
self.playerID = playerID
59+
self.flagKilledWith = flagKilledWith
60+
61+
class bz_PlayerUpdateEventData_V1 (bz_EventData):
62+
def __init__(self, playerID, pos):
63+
super().__init__(bz_ePlayerUpdateEvent)
64+
self.playerID = playerID
65+
self.state = bz_PlayerUpdateState()
66+
self.state.pos = pos
67+
68+
class bz_AllowFlagGrabData_V1 (bz_EventData):
69+
allow = True
70+
71+
def __init__(self, flagID, playerID):
72+
super().__init__(bz_eAllowFlagGrab)
73+
self.flagID = flagID
74+
self.playerID = playerID
75+
76+
class bz_BasePlayerRecord():
77+
def __init__(self, team):
78+
self.team = team
79+
80+
class bz_PlayerJoinPartEventData_V1 (bz_EventData):
81+
def __init__(self, part, team):
82+
if part:
83+
super().__init__(bz_ePlayerPartEvent)
84+
else:
85+
super().__init__(bz_ePlayerJoinEvent)
86+
self.record = bz_BasePlayerRecord(bz_eTeamType(team))
87+
88+
# events handling
89+
90+
eventHandler = []
91+
def RegisterEvent (eventType, plugin):
92+
eventHandler.append((eventType, plugin))
93+
94+
def RemoveEvent (eventType, plugin):
95+
eventHandler.remove((eventType, plugin))
96+
97+
def FlushEvents(plugin):
98+
for couple in eventHandler:
99+
if couple[1] == plugin:
100+
eventHandler.remove(couple)
101+
102+
def callEvents(event):
103+
for couple in eventHandler:
104+
if not isinstance(event, bz_EventData):
105+
break
106+
if couple[0] != event.eventType:
107+
continue
108+
event = couple[1].Event(event)
109+
return event

0 commit comments

Comments
 (0)