Initial Android commit
This commit is contained in:
commit
1e2b80c13d
8521 changed files with 231475 additions and 0 deletions
67
addons/godot-twicil/helpers/interactive_commands.gd
Normal file
67
addons/godot-twicil/helpers/interactive_commands.gd
Normal file
|
@ -0,0 +1,67 @@
|
|||
class_name InteractiveCommands
|
||||
|
||||
|
||||
class FuncRefEx extends FuncRef:
|
||||
func _init(instance:Object, method:String):
|
||||
.set_instance(instance)
|
||||
.set_function(method)
|
||||
|
||||
class InteractiveCommand:
|
||||
var func_ref:FuncRef
|
||||
var params_count:int
|
||||
var variable_params_count:int
|
||||
|
||||
func _init(func_ref:FuncRef, params_count:int, variable_params_count:bool = false):
|
||||
self.func_ref = func_ref
|
||||
self.params_count = params_count
|
||||
self.variable_params_count = variable_params_count
|
||||
|
||||
func call_command(params:Array)->void :
|
||||
func_ref.call_func(params)
|
||||
|
||||
var interactive_commands = {}
|
||||
|
||||
|
||||
func add(
|
||||
chat_command:String,
|
||||
target:Object,
|
||||
method_name:String,
|
||||
params_count:int = 1,
|
||||
variable_params_count:bool = false
|
||||
)->void :
|
||||
interactive_commands[chat_command] = InteractiveCommand.new(
|
||||
FuncRefEx.new(target, method_name) as FuncRef, params_count, variable_params_count)
|
||||
|
||||
func add_aliases(chat_command:String, new_aliases:Array)->void :
|
||||
if interactive_commands.has(chat_command):
|
||||
for new_alias in new_aliases:
|
||||
interactive_commands[new_alias] = interactive_commands[chat_command]
|
||||
|
||||
func remove(chat_command:String)->void :
|
||||
if interactive_commands.has(chat_command):
|
||||
interactive_commands[chat_command]
|
||||
interactive_commands.erase(chat_command)
|
||||
|
||||
|
||||
func _on_message_recieved(sender:String, text:String, emotes:Array)->void :
|
||||
var input_cmd:Array = text.split(" ")
|
||||
|
||||
for cmd in interactive_commands:
|
||||
if input_cmd[0] == cmd:
|
||||
|
||||
if not interactive_commands[cmd].variable_params_count and input_cmd.size() - 1 < interactive_commands[cmd].params_count:
|
||||
|
||||
return
|
||||
|
||||
var params:Array = [sender]
|
||||
var params_count:int = clamp(
|
||||
input_cmd.size() - 1,
|
||||
0,
|
||||
interactive_commands[cmd].params_count
|
||||
)
|
||||
|
||||
if params_count >= 1:
|
||||
for i in range(params_count):
|
||||
params.append(input_cmd[i + 1])
|
||||
|
||||
interactive_commands[cmd].call_command(params)
|
Loading…
Add table
Add a link
Reference in a new issue