Files
Goober5000 0ed13a69e7 add the ability to use multiple sexp parameter variants
This is specifically for OPF_SHIP.  Currently if you specify a LuaSEXP with OPF_SHIP, it only works for ships that are present in the mission when the SEXP is called.  This is my attempt at a LuaSEXP parameter variant that will return a valid ship name regardless of the ship status.  It required a bit of finagling the existing API.
2020-08-03 21:26:39 -04:00

58 lines
1.2 KiB
C++

#pragma once
#include "parse/sexp/DynamicSEXP.h"
#include "scripting/lua/LuaFunction.h"
#include "scripting/lua/LuaTable.h"
#include "parse/sexp.h"
namespace sexp {
class LuaSEXP : public DynamicSEXP {
luacpp::LuaFunction _action;
int _min_args;
int _max_args;
SCP_vector<std::pair<SCP_string, int>> _argument_types; //!< These are the types of the static, non-repeating arguments
SCP_vector<std::pair<SCP_string, int>> _varargs_type_pattern; //!< This is the pattern for the variable argument part of the SEXP
int _return_type = OPR_NULL;
int _category;
int _subcategory;
std::pair<SCP_string, int> getArgumentInternalType(int argnum) const;
luacpp::LuaValue sexpToLua(int node, int argnum) const;
public:
explicit LuaSEXP(const SCP_string& name);
void initialize() override;
int getMinimumArguments() override;
int getMaximumArguments() override;
int getArgumentType(int argnum) const override;
int execute(int node) override;
int getReturnType() override;
int getSubcategory() override;
int getCategory() override;
void parseTable();
void setAction(const luacpp::LuaFunction& action);
luacpp::LuaFunction getAction() const;
int getSexpReturnValue(const luacpp::LuaValueList& retVals) const;
};
}