Skip to content

Commit 0745b3c

Browse files
authored
Merge pull request #27 from swiftly-solution/beta
2 parents d909247 + a34c25d commit 0745b3c

File tree

481 files changed

+983
-287
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

481 files changed

+983
-287
lines changed

generator/gameevent_generator/generate.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ def render_interface(event: GameEventDef) -> str:
300300
lines.append(f"public interface {type_name} : IGameEvent<{type_name}> {{")
301301
lines.append("")
302302
# static abstract implementations required by IGameEvent<T>
303-
lines.append(f" static {type_name} IGameEvent<{type_name}>.Create() => new {type_name}Impl();")
303+
lines.append(f" static {type_name} IGameEvent<{type_name}>.Create(nint address) => new {type_name}Impl(address);")
304304
lines.append("")
305305
lines.append(f" static string IGameEvent<{type_name}>.GetName() => \"{original_name}\";")
306306
lines.append("")
@@ -410,9 +410,9 @@ def render_class(event: GameEventDef) -> str:
410410
lines.append(f"internal class {type_name}Impl : GameEvent<{type_name}>, {type_name}")
411411
lines.append("{")
412412
lines.append("")
413-
# lines.append(f" public {type_name}Impl() : base()")
414-
# lines.append(" {")
415-
# lines.append(" }")
413+
lines.append(f" public {type_name}Impl(nint address) : base(address)")
414+
lines.append(" {")
415+
lines.append(" }")
416416

417417
used_prop_names: Dict[str, int] = {}
418418
for fname, fdef in event.fields.items():

managed/src/SwiftlyS2.Core/Modules/GameEvents/GameEvent.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,16 @@ namespace SwiftlyS2.Core.GameEvents;
44

55
internal class GameEvent<T> where T : IGameEvent<T> {
66

7-
public IGameEventAccessor Accessor { get; private init; }
7+
private GameEventAccessor _Accessor { get; init; }
88

9-
public GameEvent() {
10-
Accessor = new GameEventAccessor();
9+
public IGameEventAccessor Accessor => _Accessor;
10+
11+
public GameEvent(nint address) {
12+
_Accessor = new GameEventAccessor(address);
13+
}
14+
15+
public void Dispose() {
16+
_Accessor.Dispose();
1117
}
1218

1319
public bool DontBroadcast {

managed/src/SwiftlyS2.Core/Modules/GameEvents/GameEventAccessor.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,21 @@
77

88
namespace SwiftlyS2.Core.GameEvents;
99

10-
internal class GameEventAccessor : NativeHandle, IGameEventAccessor {
11-
10+
internal class GameEventAccessor : NativeHandle, IGameEventAccessor, IDisposable {
11+
1212
public bool DontBroadcast { get; set; }
13+
private bool _IsValid = true;
1314

14-
internal GameEventAccessor() : base(0) {
15+
public GameEventAccessor(nint handle) : base(handle)
16+
{
1517
}
1618

17-
public void InternalSet(nint handle) {
18-
_Handle = handle;
19+
public void Dispose() {
20+
_IsValid = false;
1921
}
2022

2123
private void CheckIsValid() {
22-
if (_Handle == 0) throw new InvalidOperationException("The event is not initialized.");
24+
if (!_IsValid) throw new InvalidOperationException("The event is already disposed.");
2325
}
2426

2527
public void SetBool(string key, bool value) {

managed/src/SwiftlyS2.Core/Modules/GameEvents/GameEventCallback.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,10 @@ public GameEventCallback(IGameEventService.GameEventHandler<T> callback, bool pr
8282
var category = "GameEventCallback::" + EventName;
8383
if (hash != T.GetHash()) return HookResult.Continue;
8484
Profiler.StartRecording(category);
85-
var eventObj = GameEventSingletonWrapper<T>.Borrow(pEvent);
85+
var eventObj = T.Create(pEvent);
8686
var result = _callback(eventObj);
8787
pDontBroadcast.Write(eventObj.DontBroadcast);
88-
GameEventSingletonWrapper<T>.Return();
88+
eventObj.Dispose();
8989
Profiler.StopRecording(category);
9090
return result;
9191
} catch (Exception e) {

managed/src/SwiftlyS2.Core/Modules/GameEvents/GameEventService.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,9 @@ public void Fire<T>() where T : IGameEvent<T>
9191

9292
public void Fire<T>(Action<T> configureEvent) where T : IGameEvent<T> {
9393
var handle = NativeGameEvents.CreateEvent(T.GetName());
94-
var eventObj = GameEventSingletonWrapper<T>.Borrow(handle);
94+
var eventObj = T.Create(handle);
9595
configureEvent(eventObj);
96+
eventObj.Dispose();
9697
for (int i = 0; i < NativePlayerManager.GetPlayerCap(); i++) {
9798
if (NativeGameEvents.IsPlayerListeningToEventName(i, T.GetName()) && NativePlayerManager.IsPlayerOnline(i))
9899
{
@@ -104,16 +105,17 @@ public void Fire<T>(Action<T> configureEvent) where T : IGameEvent<T> {
104105

105106
public void FireToPlayer<T>(int slot) where T : IGameEvent<T> {
106107
var handle = NativeGameEvents.CreateEvent(T.GetName());
108+
var eventObj = T.Create(handle);
107109
NativeGameEvents.FireEventToClient(handle, slot);
108110
NativeGameEvents.FreeEvent(handle);
109111
}
110112

111113
public void FireToPlayer<T>(int slot, Action<T> configureEvent) where T : IGameEvent<T> {
112114
var handle = NativeGameEvents.CreateEvent(T.GetName());
113-
var eventObj = GameEventSingletonWrapper<T>.Borrow(handle);
115+
var eventObj = T.Create(handle);
114116
configureEvent(eventObj);
117+
eventObj.Dispose();
115118
NativeGameEvents.FireEventToClient(handle, slot);
116-
GameEventSingletonWrapper<T>.Return();
117119
NativeGameEvents.FreeEvent(handle);
118120
}
119121

@@ -124,10 +126,10 @@ public void FireToServer<T>() where T : IGameEvent<T> {
124126

125127
public void FireToServer<T>(Action<T> configureEvent) where T : IGameEvent<T> {
126128
var handle = NativeGameEvents.CreateEvent(T.GetName());
127-
var eventObj = GameEventSingletonWrapper<T>.Borrow(handle);
129+
var eventObj = T.Create(handle);
128130
configureEvent(eventObj);
131+
eventObj.Dispose();
129132
NativeGameEvents.FireEvent(handle, true);
130-
GameEventSingletonWrapper<T>.Return();
131133
}
132134

133135
public void Dispose() {

managed/src/SwiftlyS2.Core/Modules/GameEvents/GameEventSingletonWrapper.cs

Lines changed: 0 additions & 28 deletions
This file was deleted.

managed/src/SwiftlyS2.Generated/GameEvents/Classes/EventAchievementEarnedImpl.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ namespace SwiftlyS2.Core.GameEventDefinitions;
1212
internal class EventAchievementEarnedImpl : GameEvent<EventAchievementEarned>, EventAchievementEarned
1313
{
1414

15+
public EventAchievementEarnedImpl(nint address) : base(address)
16+
{
17+
}
1518

1619
// entindex of the player
1720
public int Player

managed/src/SwiftlyS2.Generated/GameEvents/Classes/EventAchievementEarnedLocalImpl.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ namespace SwiftlyS2.Core.GameEventDefinitions;
1212
internal class EventAchievementEarnedLocalImpl : GameEvent<EventAchievementEarnedLocal>, EventAchievementEarnedLocal
1313
{
1414

15+
public EventAchievementEarnedLocalImpl(nint address) : base(address)
16+
{
17+
}
1518

1619
// achievement ID
1720
public short Achievement

managed/src/SwiftlyS2.Generated/GameEvents/Classes/EventAchievementEventImpl.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ namespace SwiftlyS2.Core.GameEventDefinitions;
1212
internal class EventAchievementEventImpl : GameEvent<EventAchievementEvent>, EventAchievementEvent
1313
{
1414

15+
public EventAchievementEventImpl(nint address) : base(address)
16+
{
17+
}
1518

1619
// non-localized name of achievement
1720
public string AchievementName

managed/src/SwiftlyS2.Generated/GameEvents/Classes/EventAchievementInfoLoadedImpl.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,7 @@ namespace SwiftlyS2.Core.GameEventDefinitions;
1212
internal class EventAchievementInfoLoadedImpl : GameEvent<EventAchievementInfoLoaded>, EventAchievementInfoLoaded
1313
{
1414

15+
public EventAchievementInfoLoadedImpl(nint address) : base(address)
16+
{
17+
}
1518
}

0 commit comments

Comments
 (0)