Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

deprecate old plugin functions, add replcements #2952

Merged
merged 2 commits into from
Nov 16, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 65 additions & 46 deletions flixel/system/frontEnds/PluginFrontEnd.hx
Original file line number Diff line number Diff line change
Expand Up @@ -18,38 +18,65 @@ class PluginFrontEnd

/**
* Adds a new plugin to the global plugin array.
* **DEPRECATED:** In a later version this will be changed to behave like `addPlugin`.
*
* @param Plugin Any object that extends FlxBasic. Useful for managers and other things.
* @return The same plugin you passed in.
* @param plugin Any object that extends FlxBasic. Useful for managers and other things.
* @return The same plugin you passed in.
*/
@:generic
public function add<T:FlxBasic>(Plugin:T):T
@:deprecated("FlxG.plugins.add is deprecated, use `addIfUniqueType` or `addPlugin`, instead.\nNote: In a later version `add` will be changed to behave like `addPlugin`")
public inline function add<T:FlxBasic>(plugin:T):T
{
// Don't add repeats
for (plugin in list)
return addIfUniqueType(plugin);
}

/**
* Adds a new plugin to the global plugin array, does not check for existing instances of this type.
* **Note:** This is a temporary function. Eventually `add` will allow duplicates
*
* @param plugin Any object that extends FlxBasic. Useful for managers and other things.
* @return The same plugin you passed in.
*/
public function addPlugin<T:FlxBasic>(plugin:T):T
{
// No repeats found
list.push(plugin);
return plugin;
}

/**
* Adds a new plugin to the global plugin array.
* **Note:** If there is already a plugin of this type, it will not be added
*
* @param plugin Any object that extends FlxBasic. Useful for managers and other things.
* @return The same plugin you passed in.
*/
public function addIfUniqueType<T:FlxBasic>(plugin:T):T
{
// Check for repeats
for (p in list)
{
if (FlxStringUtil.sameClassName(Plugin, plugin))
{
return Plugin;
}
if (FlxStringUtil.sameClassName(plugin, p))
return plugin;
}

// No repeats! safe to add a new instance of this plugin
list.push(Plugin);
return Plugin;
// No repeats found
list.push(plugin);
return plugin;
}

/**
* Retrieves a plugin based on its class name from the global plugin array.
* Retrieves the first plugin found that matches the specified type.
*
* @param ClassType The class name of the plugin you want to retrieve. See the FlxPath or FlxTimer constructors for example usage.
* @return The plugin object, or null if no matching plugin was found.
* @param type The class name of the plugin you want to retrieve.
* See the `FlxPath` or `FlxTimer` constructors for example usage.
* @return The plugin object, or null if no matching plugin was found.
*/
public function get<T:FlxBasic>(ClassType:Class<T>):T
public inline function get<T:FlxBasic>(type:Class<T>):T
{
for (plugin in list)
{
if (Std.isOfType(plugin, ClassType))
if (Std.isOfType(plugin, type))
{
return cast plugin;
}
Expand All @@ -61,47 +88,39 @@ class PluginFrontEnd
/**
* Removes an instance of a plugin from the global plugin array.
*
* @param Plugin The plugin instance you want to remove.
* @return The same plugin you passed in.
* @param plugin The plugin instance you want to remove.
* @return The same plugin you passed in.
*/
public function remove<T:FlxBasic>(Plugin:T):T
public inline function remove<T:FlxBasic>(plugin:T):T
{
// Don't add repeats
var i:Int = list.length - 1;

while (i >= 0)
{
if (list[i] == Plugin)
{
list.splice(i, 1);
return Plugin;
}
i--;
}

return Plugin;
list.remove(plugin);
return plugin;
}

/**
* Removes all instances of a plugin from the global plugin array.
*
* @param ClassType The class name of the plugin type you want removed from the array.
* @return Whether or not at least one instance of this plugin type was removed.
* @param type The class name of the plugin type you want removed from the array.
* @return Whether or not at least one instance of this plugin type was removed.
*/
public function removeType(ClassType:Class<FlxBasic>):Bool
@:deprecated("FlxG.plugin.removeType is deprecated, use `removeAllByType` instead")
public inline function removeType(type:Class<FlxBasic>):Bool
{
return removeAllByType(type);
}

public function removeAllByType(type:Class<FlxBasic>):Bool
{
// Don't add repeats
var results:Bool = false;
var i:Int = list.length - 1;

while (i >= 0)
var i = list.length;
while (i-- > 0)
{
if (Std.isOfType(list[i], ClassType))
if (Std.isOfType(list[i], type))
{
list.splice(i, 1);
results = true;
}
i--;
}

return results;
Expand All @@ -110,9 +129,9 @@ class PluginFrontEnd
@:allow(flixel.FlxG)
function new()
{
add(FlxTimer.globalManager = new FlxTimerManager());
add(FlxTween.globalManager = new FlxTweenManager());
add(FlxMouseEvent.globalManager = new FlxMouseEventManager());
addPlugin(FlxTimer.globalManager = new FlxTimerManager());
addPlugin(FlxTween.globalManager = new FlxTweenManager());
addPlugin(FlxMouseEvent.globalManager = new FlxMouseEventManager());
}

/**
Expand Down
Loading