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