Add a plugin which allows creating mixins for Mobs

Adds a mob-extension plugin, which allows creating modules as mixins to
be monkey-patched into the Mob class.  Having a standard method of doing
this prevents confusing problems with mixin name conflicts, by allowing
the plugin to raise an error that 2 mixins with the same name exist.
This commit is contained in:
Gary Tierney
2017-01-01 08:13:09 +00:00
parent 82643b10b6
commit b047d0197a
2 changed files with 35 additions and 0 deletions
@@ -0,0 +1,20 @@
require 'java'
java_import 'org.apollo.game.model.entity.Mob'
module MobExtension
MOB_EXTENSIONS = []
def self.register(extension)
fail 'Provided extension object is not a module' unless extension.is_a?(Module)
new_mixins = extension.public_instance_methods
current_mixins = MOB_EXTENSIONS.map { |e| {e.to_s => e.public_instance_methods} }
current_mixins.each do |ext, methods|
methods.each {|m| fail "Extension #{ext} already provides method #{m}" if new_mixins.include?(m) }
end
Mob.include(extension)
end
end
@@ -0,0 +1,15 @@
<?xml version="1.0"?>
<plugin>
<id>mob-extension</id>
<version>0.1</version>
<name>Mob Extensions</name>
<description>Adds support for extending Mobs with new functionality</description>
<authors>
<author>Gary Tierney</author>
</authors>
<scripts>
<script>extension.rb</script>
</scripts>
<dependencies>
</dependencies>
</plugin>