@@ -443,54 +443,40 @@ Local<Value> CommandClass::optional(const Arguments& args) {
443443Local<Value> CommandClass::addOverload (const Arguments& args) {
444444 try {
445445 if (args.size () == 0 ) return Boolean::newBoolean (true );
446- auto cmd = get ().runtimeOverload (getEngineOwnData ()->plugin );
447- if (args[ 0 ]. isNumber () ) {
448- for ( int i = 0 ; i < args. size (); ++i) {
449- CHECK_ARG_TYPE (args[i], ValueKind:: kNumber );
450- std::string paramName = std::to_string (args[i]. asNumber (). toInt32 ());
451- auto & paramList = getEngineOwnData ()-> plugin -> registeredCommands [commandName];
452- for ( auto & info : paramList ) {
453- if (info. name == paramName || info.enumName == paramName) {
454- if (info. optional ) {
455- if (info.type == ParamKind::Kind::Enum || info.type == ParamKind::Kind::SoftEnum) {
456- cmd. optional (info. enumName , info. type , info. enumName ). option (info. option );
457- } else {
458- cmd. optional ( info.name , info. type ). option (info. option );
459- }
446+ auto cmd = get ().runtimeOverload (getEngineOwnData ()->plugin );
447+ auto overloadFunc = [](RuntimeOverload& cmd, std::string const & commandName, std::string const & paramName ) {
448+ auto & paramList = getEngineOwnData ()-> plugin -> registeredCommands [commandName];
449+ for ( auto & info : paramList) {
450+ if (info. name == paramName || info. enumName == paramName) {
451+ if (info. optional ) {
452+ if ( info. type == ParamKind::Kind::Enum || info. type == ParamKind::Kind::SoftEnum ) {
453+ cmd. optional ( info.enumName , info. type , info. enumName ). option (info. option );
454+ } else {
455+ cmd. optional (info.name , info.type ). option (info. option );
456+ }
457+ } else {
458+ if (info. type == ParamKind::Kind::Enum || info.type == ParamKind::Kind::SoftEnum) {
459+ cmd. required (info. enumName , info. type , info. enumName ). option (info. option );
460460 } else {
461- if (info.type == ParamKind::Kind::Enum || info.type == ParamKind::Kind::SoftEnum) {
462- cmd.required (info.enumName , info.type , info.enumName ).option (info.option );
463- } else {
464- cmd.required (info.name , info.type ).option (info.option );
465- }
461+ cmd.required (info.name , info.type ).option (info.option );
466462 }
467463 }
468464 }
469465 }
466+ };
467+ if (args[0 ].isNumber ()) {
468+ for (int i = 0 ; i < args.size (); ++i) {
469+ CHECK_ARG_TYPE (args[i], ValueKind::kNumber );
470+ std::string paramName = std::to_string (args[i].asNumber ().toInt32 ());
471+ overloadFunc (cmd, commandName, paramName);
472+ }
470473 cmd.execute (onExecute);
471474 return Boolean::newBoolean (true );
472475 } else if (args[0 ].isString ()) {
473476 for (int i = 0 ; i < args.size (); ++i) {
474477 CHECK_ARG_TYPE (args[i], ValueKind::kString );
475478 std::string paramName = args[0 ].asString ().toString ();
476- auto & paramList = getEngineOwnData ()->plugin ->registeredCommands [commandName];
477- for (auto & info : paramList) {
478- if (info.name == paramName || info.enumName == paramName) {
479- if (info.optional ) {
480- if (info.type == ParamKind::Kind::Enum || info.type == ParamKind::Kind::SoftEnum) {
481- cmd.optional (info.enumName , info.type , info.enumName ).option (info.option );
482- } else {
483- cmd.optional (info.name , info.type ).option (info.option );
484- }
485- } else {
486- if (info.type == ParamKind::Kind::Enum || info.type == ParamKind::Kind::SoftEnum) {
487- cmd.required (info.enumName , info.type , info.enumName ).option (info.option );
488- } else {
489- cmd.required (info.name , info.type ).option (info.option );
490- }
491- }
492- }
493- }
479+ overloadFunc (cmd, commandName, paramName);
494480 }
495481 cmd.execute (onExecute);
496482 return Boolean::newBoolean (true );
@@ -501,49 +487,15 @@ Local<Value> CommandClass::addOverload(const Arguments& args) {
501487 for (int i = 0 ; i < arr.size (); ++i) {
502488 CHECK_ARG_TYPE (arr.get (i), ValueKind::kNumber );
503489 std::string paramName = std::to_string (arr.get (i).asNumber ().toInt32 ());
504- auto & paramList = getEngineOwnData ()->plugin ->registeredCommands [commandName];
505- for (auto & info : paramList) {
506- if (info.name == paramName || info.enumName == paramName) {
507- if (info.optional ) {
508- if (info.type == ParamKind::Kind::Enum || info.type == ParamKind::Kind::SoftEnum) {
509- cmd.optional (info.enumName , info.type , info.enumName ).option (info.option );
510- } else {
511- cmd.optional (info.name , info.type ).option (info.option );
512- }
513- } else {
514- if (info.type == ParamKind::Kind::Enum || info.type == ParamKind::Kind::SoftEnum) {
515- cmd.required (info.enumName , info.type , info.enumName ).option (info.option );
516- } else {
517- cmd.required (info.name , info.type ).option (info.option );
518- }
519- }
520- }
521- }
490+ overloadFunc (cmd, commandName, paramName);
522491 }
523492 cmd.execute (onExecute);
524493 return Boolean::newBoolean (true );
525494 } else if (arr.get (0 ).isString ()) {
526495 for (int i = 0 ; i < arr.size (); ++i) {
527496 CHECK_ARG_TYPE (arr.get (i), ValueKind::kString );
528497 std::string paramName = arr.get (i).asString ().toString ();
529- auto & paramList = getEngineOwnData ()->plugin ->registeredCommands [commandName];
530- for (auto & info : paramList) {
531- if (info.name == paramName || info.enumName == paramName) {
532- if (info.optional ) {
533- if (info.type == ParamKind::Kind::Enum || info.type == ParamKind::Kind::SoftEnum) {
534- cmd.optional (info.enumName , info.type , info.enumName ).option (info.option );
535- } else {
536- cmd.optional (info.name , info.type ).option (info.option );
537- }
538- } else {
539- if (info.type == ParamKind::Kind::Enum || info.type == ParamKind::Kind::SoftEnum) {
540- cmd.required (info.enumName , info.type , info.enumName ).option (info.option );
541- } else {
542- cmd.required (info.name , info.type ).option (info.option );
543- }
544- }
545- }
546- }
498+ overloadFunc (cmd, commandName, paramName);
547499 }
548500 cmd.execute (onExecute);
549501 return Boolean::newBoolean (true );
0 commit comments