diff --git a/sources/Acedia.uc b/sources/Acedia.uc
index 3a7fe12..fbe7764 100644
--- a/sources/Acedia.uc
+++ b/sources/Acedia.uc
@@ -49,6 +49,7 @@ event PreBeginPlay()
}
default.selfReference = self;
// Boot up Acedia
+ Spawn(class'Global');
LoadManifest(class'Manifest');
LaunchServices();
InjectBroadcastHandler(); // TODO: move this to 'SideEffect' mechanic
diff --git a/sources/AcediaActor.uc b/sources/AcediaActor.uc
new file mode 100644
index 0000000..1950db2
--- /dev/null
+++ b/sources/AcediaActor.uc
@@ -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 .
+ */
+class AcediaActor extends Actor
+ abstract;
+
+var protected Global _;
+
+event PreBeginPlay()
+{
+ super.PreBeginPlay();
+ if (_ == none)
+ {
+ _ = Global(class'Global'.static.GetInstance());
+ default._ = _;
+ }
+}
+
+defaultproperties
+{
+}
\ No newline at end of file
diff --git a/sources/AcediaObject.uc b/sources/AcediaObject.uc
new file mode 100644
index 0000000..ec6cb4d
--- /dev/null
+++ b/sources/AcediaObject.uc
@@ -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 .
+ */
+class AcediaObject extends Object
+ abstract;
+
+public static final function Global _()
+{
+ return Global(class'Global'.static.GetInstance());
+}
+
+defaultproperties
+{
+}
\ No newline at end of file
diff --git a/sources/Global.uc b/sources/Global.uc
new file mode 100644
index 0000000..8c46772
--- /dev/null
+++ b/sources/Global.uc
@@ -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 .
+ */
+class Global extends Singleton;
+
+var public Acedia acedia;
+
+protected function OnCreated()
+{
+ acedia = class'Acedia'.static.GetInstance();
+}
\ No newline at end of file