This repository has been archived on 2024-07-18. You can view files and clone it, but cannot push or open issues or pull requests.
lwb5/scripts/lib/actions.inc

94 lines
2.4 KiB
PHP
Raw Normal View History

2016-01-10 11:01:49 +01:00
<?php
/****************************************************************************
* GAME ACTIONS
****************************************************************************/
/** The game_action class should be used as a base class for all classes
* implementing specific game actions.
*
* It initializes the object by storing the game instance and loading the
* required libraries.
*/
abstract class game_action {
/** A reference to the game instance the action is called on.
*/
protected $game;
/** Libraries loaded and instanciated. These libraries will
* be accessed to the __get() method.
*/
private $__libraries;
/** The constructor initialises the instance by storing the
* associated game instance and loading libraries.
*/
protected function __construct($game, $libraries = null) {
$this->game = $game;
if (is_null($libraries)) {
$libraries = array();
}
$this->__initLibraries($libraries);
}
/** This method loads libraries from the game instance and
* stores them inside the $__libraries array.
*/
private function __initLibraries($libraries) {
$libs = array();
foreach ($libraries as $key => $name) {
$libs[$key] = $this->game->getLib($name);
}
$this->__libraries = $libs;
}
/** The __get() overload method is useful to access the
* libraries associated with this game action.
*/
protected function __get($var) {
if (array_key_exists($var, $this->__libraries)) {
return $this->__libraries[$var];
}
return null;
}
}
/** This function allows the user to call a game action function; it must
* have at least one argument, which may be either a string (the name of the
* action function to call for the current game version) or an array
* containing two strings (the version identifier and the name of the action).
* Other arguments may follow; they will be passed to the action function.
*/
function gameAction() {
$sitePath = input::$path;
$n = func_num_args();
if ($n == 0) {
l::fatal(22, "Requested game was '$sitePath'");
}
$args = func_get_args();
$gas = array_shift($args);
if (is_array($gas)) {
list($v,$a) = $gas;
} elseif (is_string($gas)) {
$v = $sitePath;
$a = $gas;
} else {
l::fatal(23, "Requested game was '$sitePath'");
}
array_unshift($args, $a);
$g = config::getGame($v);
l::deprecated("gameAction($v, $a, ...)");
return call_user_func_array(array($g, 'deprecatedAction'), $args);
}
?>