Browse Source
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 (`_` / `_()`).new
Anton Tarasenko
5 years ago
4 changed files with 105 additions and 0 deletions
@ -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 |
||||||
|
{ |
||||||
|
} |
@ -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 |
||||||
|
{ |
||||||
|
} |
@ -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