From 38b024d2ce3c3285f8d84a9092f1bfdd5f6859bb Mon Sep 17 00:00:00 2001 From: Anton Tarasenko Date: Sat, 16 Jul 2022 05:32:59 +0700 Subject: [PATCH] Change `TimeAPI` to choose class from adapter --- .../Time/Events/Timer_OnElapsed_Signal.uc | 2 +- .../API}/Time/Events/Timer_OnElapsed_Slot.uc | 0 .../{ => ServerRealm/API}/Time/RealTimer.uc | 0 sources/ServerRealm/API/Time/ServerTimeAPI.uc | 63 +++++++++++++++++++ .../API/Time/ServerTimeAPIBase.uc} | 44 +++---------- sources/{ => ServerRealm/API}/Time/Timer.uc | 0 sources/ServerRealm/ServerAcediaAdapter.uc | 2 + sources/ServerRealm/ServerGlobal.uc | 9 +-- 8 files changed, 81 insertions(+), 39 deletions(-) rename sources/{ => ServerRealm/API}/Time/Events/Timer_OnElapsed_Signal.uc (96%) rename sources/{ => ServerRealm/API}/Time/Events/Timer_OnElapsed_Slot.uc (100%) rename sources/{ => ServerRealm/API}/Time/RealTimer.uc (100%) create mode 100644 sources/ServerRealm/API/Time/ServerTimeAPI.uc rename sources/{Time/TimeAPI.uc => ServerRealm/API/Time/ServerTimeAPIBase.uc} (74%) rename sources/{ => ServerRealm/API}/Time/Timer.uc (100%) diff --git a/sources/Time/Events/Timer_OnElapsed_Signal.uc b/sources/ServerRealm/API/Time/Events/Timer_OnElapsed_Signal.uc similarity index 96% rename from sources/Time/Events/Timer_OnElapsed_Signal.uc rename to sources/ServerRealm/API/Time/Events/Timer_OnElapsed_Signal.uc index ec2cc82..4d83f4a 100644 --- a/sources/Time/Events/Timer_OnElapsed_Signal.uc +++ b/sources/ServerRealm/API/Time/Events/Timer_OnElapsed_Signal.uc @@ -19,7 +19,7 @@ */ class Timer_OnElapsed_Signal extends Signal; -public final function Emit(Timer source) +public function Emit(Timer source) { local Slot nextSlot; StartIterating(); diff --git a/sources/Time/Events/Timer_OnElapsed_Slot.uc b/sources/ServerRealm/API/Time/Events/Timer_OnElapsed_Slot.uc similarity index 100% rename from sources/Time/Events/Timer_OnElapsed_Slot.uc rename to sources/ServerRealm/API/Time/Events/Timer_OnElapsed_Slot.uc diff --git a/sources/Time/RealTimer.uc b/sources/ServerRealm/API/Time/RealTimer.uc similarity index 100% rename from sources/Time/RealTimer.uc rename to sources/ServerRealm/API/Time/RealTimer.uc diff --git a/sources/ServerRealm/API/Time/ServerTimeAPI.uc b/sources/ServerRealm/API/Time/ServerTimeAPI.uc new file mode 100644 index 0000000..1461311 --- /dev/null +++ b/sources/ServerRealm/API/Time/ServerTimeAPI.uc @@ -0,0 +1,63 @@ +/** + * Acedia's default `ServerTimeAPIBase` API implementation + * Copyright 2021-2022 Anton Tarasenko + *------------------------------------------------------------------------------ + * This file is part of Acedia. + * + * Acedia is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3 of the License, or + * (at your option) any later version. + * + * Acedia is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Acedia. If not, see . + */ +class ServerTimeAPI extends ServerTimeAPIBase; + +public function Timer NewTimer( + optional float interval, + optional bool autoReset) +{ + return Timer(_.memory.Allocate(class'Timer')) + .SetInterval(interval) + .SetAutoReset(autoReset); +} + +public function Timer StartTimer(float interval, optional bool autoReset) +{ + return Timer(_.memory.Allocate(class'Timer')) + .SetInterval(interval) + .SetAutoReset(autoReset) + .Start(); +} + +public function RealTimer NewRealTimer( + optional float interval, + optional bool autoReset) +{ + local RealTimer newTimer; + newTimer = RealTimer(_.memory.Allocate(class'RealTimer')); + newTimer.SetInterval(interval).SetAutoReset(autoReset); + return newTimer; +} + +public function RealTimer StartRealTimer( + float interval, + optional bool autoReset) +{ + local RealTimer newTimer; + newTimer = RealTimer(_.memory.Allocate(class'RealTimer')); + newTimer.SetInterval(interval) + .SetAutoReset(autoReset) + .Start(); + return newTimer; +} + +defaultproperties +{ +} \ No newline at end of file diff --git a/sources/Time/TimeAPI.uc b/sources/ServerRealm/API/Time/ServerTimeAPIBase.uc similarity index 74% rename from sources/Time/TimeAPI.uc rename to sources/ServerRealm/API/Time/ServerTimeAPIBase.uc index 9bce64d..1f33bd0 100644 --- a/sources/Time/TimeAPI.uc +++ b/sources/ServerRealm/API/Time/ServerTimeAPIBase.uc @@ -1,6 +1,6 @@ /** * API that provides time-related methods. - * Copyright 2021 Anton Tarasenko + * Copyright 2021-2022 Anton Tarasenko *------------------------------------------------------------------------------ * This file is part of Acedia. * @@ -17,7 +17,8 @@ * You should have received a copy of the GNU General Public License * along with Acedia. If not, see . */ -class TimeAPI extends AcediaObject; +class ServerTimeAPIBase extends AcediaObject + abstract; /** * Creates new `Timer`. Does not start it. @@ -30,14 +31,9 @@ class TimeAPI extends AcediaObject; * @return `Timer`, configured to emit `OnElapsed()` every `interval` seconds. * Not started. Guaranteed to be not `none`. */ -public final function Timer NewTimer( +public function Timer NewTimer( optional float interval, - optional bool autoReset) -{ - return Timer(_.memory.Allocate(class'Timer')) - .SetInterval(interval) - .SetAutoReset(autoReset); -} + optional bool autoReset); /** * Creates and starts new `Timer`. @@ -50,13 +46,7 @@ public final function Timer NewTimer( * @return `Timer`, configured to emit `OnElapsed()` every `interval` seconds. * Guaranteed to be not `none`. */ -public final function Timer StartTimer(float interval, optional bool autoReset) -{ - return Timer(_.memory.Allocate(class'Timer')) - .SetInterval(interval) - .SetAutoReset(autoReset) - .Start(); -} +public function Timer StartTimer(float interval, optional bool autoReset); /** * Creates new `RealTimer`. Does not start it. @@ -69,15 +59,9 @@ public final function Timer StartTimer(float interval, optional bool autoReset) * @return `RealTimer`, configured to emit `OnElapsed()` every `interval` * seconds. Not started. Guaranteed to be not `none`. */ -public final function RealTimer NewRealTimer( +public function RealTimer NewRealTimer( optional float interval, - optional bool autoReset) -{ - local RealTimer newTimer; - newTimer = RealTimer(_.memory.Allocate(class'RealTimer')); - newTimer.SetInterval(interval).SetAutoReset(autoReset); - return newTimer; -} + optional bool autoReset); /** * Creates and starts new `RealTimer`. @@ -91,17 +75,9 @@ public final function RealTimer NewRealTimer( * @return `RealTimer`, configured to emit `OnElapsed()` every `interval` * seconds. Guaranteed to be not `none`. */ -public final function RealTimer StartRealTimer( +public function RealTimer StartRealTimer( float interval, - optional bool autoReset) -{ - local RealTimer newTimer; - newTimer = RealTimer(_.memory.Allocate(class'RealTimer')); - newTimer.SetInterval(interval) - .SetAutoReset(autoReset) - .Start(); - return newTimer; -} + optional bool autoReset); defaultproperties { diff --git a/sources/Time/Timer.uc b/sources/ServerRealm/API/Time/Timer.uc similarity index 100% rename from sources/Time/Timer.uc rename to sources/ServerRealm/API/Time/Timer.uc diff --git a/sources/ServerRealm/ServerAcediaAdapter.uc b/sources/ServerRealm/ServerAcediaAdapter.uc index 5e6d2a2..681a67f 100644 --- a/sources/ServerRealm/ServerAcediaAdapter.uc +++ b/sources/ServerRealm/ServerAcediaAdapter.uc @@ -22,6 +22,7 @@ class ServerAcediaAdapter extends AcediaAdapter abstract; +var public const class serverTimeAPIClass; var public const class serverUnrealAPIClass; var public const class serverBroadcastAPIClass; var public const class serverGameRulesAPIClass; @@ -30,6 +31,7 @@ var public const class serverMutatorAPIClass; defaultproperties { + serverTimeAPIClass = class'ServerTimeAPI' serverUnrealAPIClass = class'ServerUnrealAPI' serverBroadcastAPIClass = class'BroadcastAPI' serverGameRulesAPIClass = class'GameRulesAPI' diff --git a/sources/ServerRealm/ServerGlobal.uc b/sources/ServerRealm/ServerGlobal.uc index 6732851..8354eb3 100644 --- a/sources/ServerRealm/ServerGlobal.uc +++ b/sources/ServerRealm/ServerGlobal.uc @@ -25,9 +25,9 @@ class ServerGlobal extends CoreGlobal; // main instance in this variable's default value. var protected ServerGlobal myself; -var public KFFrontend kf; -var public ServerUnrealAPI unreal; -var public TimeAPI time; +var public KFFrontend kf; +var public ServerUnrealAPIBase unreal; +var public ServerTimeAPIBase time; var private LoggerAPI.Definition fatBadAdapterClass; @@ -67,7 +67,8 @@ protected function Initialize() unreal = ServerUnrealAPI( _.memory.Allocate(serverAdapterClass.default.serverUnrealAPIClass)); unreal.Initialize(serverAdapterClass); - time = TimeAPI(_.memory.Allocate(class'TimeAPI')); + time = ServerTimeAPI( + _.memory.Allocate(serverAdapterClass.default.serverTimeAPIClass)); kf = KFFrontend(_.memory.Allocate(class'KF1_Frontend')); }