Browse Source
This change was mostly done in an attempt to create Acedia's server API faster and, consecuently, load required `Feature`s faster as well. As a byproduct - Acedia launcer's core settings (inside `[AcediaLauncher.Packages]` serction) were moved to a separate `Object`, accessible from all Acedia classes. This is also the cleaner way to do it.develop
Anton Tarasenko
2 years ago
3 changed files with 279 additions and 245 deletions
@ -0,0 +1,119 @@ |
|||||||
|
/** |
||||||
|
* Main and only Acedia mutator. Used for providing access to mutator |
||||||
|
* events' calls and detecting server travel. |
||||||
|
* Copyright 2020-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 <https://www.gnu.org/licenses/>. |
||||||
|
*/ |
||||||
|
class AcediaLauncherMut extends Mutator; |
||||||
|
|
||||||
|
// Acedia's reference to a `Global` object. |
||||||
|
var private Global _; |
||||||
|
|
||||||
|
// Responsible for setting up Acedia's game modes in current voting system |
||||||
|
var private VotingHandlerAdapter votingAdapter; |
||||||
|
|
||||||
|
var Mutator_OnMutate_Signal onMutateSignal; |
||||||
|
var Mutator_OnModifyLogin_Signal onModifyLoginSignal; |
||||||
|
var Mutator_OnCheckReplacement_Signal onCheckReplacementSignal; |
||||||
|
|
||||||
|
simulated function PreBeginPlay() |
||||||
|
{ |
||||||
|
local StartUp startUpActor; |
||||||
|
|
||||||
|
if (level.netMode == NM_DedicatedServer) |
||||||
|
{ |
||||||
|
foreach AllActors(class'StartUp', startUpActor) |
||||||
|
{ |
||||||
|
votingAdapter = startUpActor.GetVotingHandlerAdapter(); |
||||||
|
startUpActor.Destroy(); |
||||||
|
break; |
||||||
|
} |
||||||
|
if (votingAdapter != none) { |
||||||
|
votingAdapter.InjectIntoVotingHandler(); |
||||||
|
} |
||||||
|
SetupMutatorSignals(); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
_ = class'Global'.static.GetInstance(); |
||||||
|
class'ClientLevelCore'.static.CreateLevelCore(self); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function ServerTraveling(string URL, bool bItems) |
||||||
|
{ |
||||||
|
if (votingAdapter != none) |
||||||
|
{ |
||||||
|
votingAdapter.PrepareForServerTravel(); |
||||||
|
votingAdapter.RestoreVotingHandlerConfigBackup(); |
||||||
|
_.memory.Free(votingAdapter); |
||||||
|
votingAdapter = none; |
||||||
|
} |
||||||
|
_.environment.ShutDown(); |
||||||
|
if (nextMutator != none) { |
||||||
|
nextMutator.ServerTraveling(URL, bItems); |
||||||
|
} |
||||||
|
Destroy(); |
||||||
|
} |
||||||
|
|
||||||
|
// Fetches and sets up signals that `Mutator` needs to provide |
||||||
|
private function SetupMutatorSignals() |
||||||
|
{ |
||||||
|
local ServerUnrealService service; |
||||||
|
|
||||||
|
service = ServerUnrealService(class'ServerUnrealService'.static.Require()); |
||||||
|
onMutateSignal = Mutator_OnMutate_Signal( |
||||||
|
service.GetSignal(class'Mutator_OnMutate_Signal')); |
||||||
|
onModifyLoginSignal = Mutator_OnModifyLogin_Signal( |
||||||
|
service.GetSignal(class'Mutator_OnModifyLogin_Signal')); |
||||||
|
onCheckReplacementSignal = Mutator_OnCheckReplacement_Signal( |
||||||
|
service.GetSignal(class'Mutator_OnCheckReplacement_Signal')); |
||||||
|
} |
||||||
|
|
||||||
|
function bool CheckReplacement(Actor other, out byte isSuperRelevant) |
||||||
|
{ |
||||||
|
if (onCheckReplacementSignal != none) { |
||||||
|
return onCheckReplacementSignal.Emit(other, isSuperRelevant); |
||||||
|
} |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
function Mutate(string command, PlayerController sendingController) |
||||||
|
{ |
||||||
|
if (onMutateSignal != none) { |
||||||
|
onMutateSignal.Emit(command, sendingController); |
||||||
|
} |
||||||
|
super.Mutate(command, sendingController); |
||||||
|
} |
||||||
|
|
||||||
|
function ModifyLogin(out string portal, out string options) |
||||||
|
{ |
||||||
|
if (onModifyLoginSignal != none) { |
||||||
|
onModifyLoginSignal.Emit(portal, options); |
||||||
|
} |
||||||
|
super.ModifyLogin(portal, options); |
||||||
|
} |
||||||
|
|
||||||
|
defaultproperties |
||||||
|
{ |
||||||
|
remoteRole = ROLE_SimulatedProxy |
||||||
|
bAlwaysRelevant = true |
||||||
|
// Mutator description |
||||||
|
GroupName = "Package loader" |
||||||
|
FriendlyName = "Acedia loader" |
||||||
|
Description = "Launcher for Acedia packages" |
||||||
|
} |
Loading…
Reference in new issue