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