Add global namespace to Acedia actors and objects
We want all actors and objects defined in Acedia to share a global namespace that provides an access to important variables (such as `Acedia` reference) and functions. We add a `Global` singleton and `AcediaActor` / `AcediaObject` base classes with a quick accessor to it's instance (`_` / `_()`).
This commit is contained in:
parent
dd45e692fc
commit
076ebe8fcf
@ -49,6 +49,7 @@ event PreBeginPlay()
|
|||||||
}
|
}
|
||||||
default.selfReference = self;
|
default.selfReference = self;
|
||||||
// Boot up Acedia
|
// Boot up Acedia
|
||||||
|
Spawn(class'Global');
|
||||||
LoadManifest(class'Manifest');
|
LoadManifest(class'Manifest');
|
||||||
LaunchServices();
|
LaunchServices();
|
||||||
InjectBroadcastHandler(); // TODO: move this to 'SideEffect' mechanic
|
InjectBroadcastHandler(); // TODO: move this to 'SideEffect' mechanic
|
||||||
|
40
sources/AcediaActor.uc
Normal file
40
sources/AcediaActor.uc
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/**
|
||||||
|
* Actor base class to be used to Acedia instead of an `Actor`.
|
||||||
|
* The only difference is defined `_` member that provides convenient access to
|
||||||
|
* Acedia's API.
|
||||||
|
* It isn't guaranteed that `default._` will be defined for `AcediaActor`s.
|
||||||
|
* Copyright 2020 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 AcediaActor extends Actor
|
||||||
|
abstract;
|
||||||
|
|
||||||
|
var protected Global _;
|
||||||
|
|
||||||
|
event PreBeginPlay()
|
||||||
|
{
|
||||||
|
super.PreBeginPlay();
|
||||||
|
if (_ == none)
|
||||||
|
{
|
||||||
|
_ = Global(class'Global'.static.GetInstance());
|
||||||
|
default._ = _;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
}
|
35
sources/AcediaObject.uc
Normal file
35
sources/AcediaObject.uc
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/**
|
||||||
|
* Object base class to be used to Acedia instead of an `Object`.
|
||||||
|
* The only difference is defined `_` member that provides convenient access to
|
||||||
|
* Acedia's API.
|
||||||
|
* Since `Global` is an actor, we wish to avoid storing it's instance in
|
||||||
|
* the object because it can mess with garbage collection on level change.
|
||||||
|
* So we provide an accessor function `_()` instead.
|
||||||
|
* Copyright 2020 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 AcediaObject extends Object
|
||||||
|
abstract;
|
||||||
|
|
||||||
|
public static final function Global _()
|
||||||
|
{
|
||||||
|
return Global(class'Global'.static.GetInstance());
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
}
|
29
sources/Global.uc
Normal file
29
sources/Global.uc
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/**
|
||||||
|
* Class for an object that will provide an access to a Acedia's functionality
|
||||||
|
* by giving a reference to this actor to all Acedia's objects and actors,
|
||||||
|
* emulating a global API namespace.
|
||||||
|
* Copyright 2020 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 Global extends Singleton;
|
||||||
|
|
||||||
|
var public Acedia acedia;
|
||||||
|
|
||||||
|
protected function OnCreated()
|
||||||
|
{
|
||||||
|
acedia = class'Acedia'.static.GetInstance();
|
||||||
|
}
|
Reference in New Issue
Block a user