visual_script_nodes.h 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092
  1. /*************************************************************************/
  2. /* visual_script_nodes.h */
  3. /*************************************************************************/
  4. /* This file is part of: */
  5. /* GODOT ENGINE */
  6. /* https://godotengine.org */
  7. /*************************************************************************/
  8. /* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
  9. /* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
  10. /* */
  11. /* Permission is hereby granted, free of charge, to any person obtaining */
  12. /* a copy of this software and associated documentation files (the */
  13. /* "Software"), to deal in the Software without restriction, including */
  14. /* without limitation the rights to use, copy, modify, merge, publish, */
  15. /* distribute, sublicense, and/or sell copies of the Software, and to */
  16. /* permit persons to whom the Software is furnished to do so, subject to */
  17. /* the following conditions: */
  18. /* */
  19. /* The above copyright notice and this permission notice shall be */
  20. /* included in all copies or substantial portions of the Software. */
  21. /* */
  22. /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
  23. /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
  24. /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
  25. /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
  26. /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
  27. /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
  28. /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
  29. /*************************************************************************/
  30. #ifndef VISUAL_SCRIPT_NODES_H
  31. #define VISUAL_SCRIPT_NODES_H
  32. #include "core/object/gdvirtual.gen.inc"
  33. #include "core/object/script_language.h"
  34. #include "scene/main/multiplayer_api.h"
  35. #include "visual_script.h"
  36. class VisualScriptFunction : public VisualScriptNode {
  37. GDCLASS(VisualScriptFunction, VisualScriptNode);
  38. struct Argument {
  39. String name;
  40. Variant::Type type;
  41. PropertyHint hint;
  42. String hint_string;
  43. };
  44. Vector<Argument> arguments;
  45. bool stack_less;
  46. int stack_size;
  47. MultiplayerAPI::RPCMode rpc_mode;
  48. bool sequenced;
  49. protected:
  50. bool _set(const StringName &p_name, const Variant &p_value);
  51. bool _get(const StringName &p_name, Variant &r_ret) const;
  52. void _get_property_list(List<PropertyInfo> *p_list) const;
  53. public:
  54. virtual int get_output_sequence_port_count() const override;
  55. virtual bool has_input_sequence_port() const override;
  56. virtual String get_output_sequence_port_text(int p_port) const override;
  57. virtual int get_input_value_port_count() const override;
  58. virtual int get_output_value_port_count() const override;
  59. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  60. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  61. virtual String get_caption() const override;
  62. virtual String get_text() const override;
  63. virtual String get_category() const override { return "flow_control"; }
  64. void add_argument(Variant::Type p_type, const String &p_name, int p_index = -1, const PropertyHint p_hint = PROPERTY_HINT_NONE, const String &p_hint_string = String(""));
  65. void set_argument_type(int p_argidx, Variant::Type p_type);
  66. Variant::Type get_argument_type(int p_argidx) const;
  67. void set_argument_name(int p_argidx, const String &p_name);
  68. String get_argument_name(int p_argidx) const;
  69. void remove_argument(int p_argidx);
  70. int get_argument_count() const;
  71. void set_stack_less(bool p_enable);
  72. bool is_stack_less() const;
  73. void set_sequenced(bool p_enable);
  74. bool is_sequenced() const;
  75. void set_stack_size(int p_size);
  76. int get_stack_size() const;
  77. void set_rpc_mode(MultiplayerAPI::RPCMode p_mode);
  78. MultiplayerAPI::RPCMode get_rpc_mode() const;
  79. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  80. virtual void reset_state() override;
  81. VisualScriptFunction();
  82. };
  83. class VisualScriptLists : public VisualScriptNode {
  84. GDCLASS(VisualScriptLists, VisualScriptNode)
  85. struct Port {
  86. String name;
  87. Variant::Type type;
  88. };
  89. protected:
  90. Vector<Port> inputports;
  91. Vector<Port> outputports;
  92. enum {
  93. OUTPUT_EDITABLE = 0x0001,
  94. OUTPUT_NAME_EDITABLE = 0x0002,
  95. OUTPUT_TYPE_EDITABLE = 0x0004,
  96. INPUT_EDITABLE = 0x0008,
  97. INPUT_NAME_EDITABLE = 0x000F,
  98. INPUT_TYPE_EDITABLE = 0x0010,
  99. };
  100. int flags;
  101. bool sequenced;
  102. bool _set(const StringName &p_name, const Variant &p_value);
  103. bool _get(const StringName &p_name, Variant &r_ret) const;
  104. void _get_property_list(List<PropertyInfo> *p_list) const;
  105. static void _bind_methods();
  106. public:
  107. virtual void reset_state() override;
  108. virtual bool is_output_port_editable() const;
  109. virtual bool is_output_port_name_editable() const;
  110. virtual bool is_output_port_type_editable() const;
  111. virtual bool is_input_port_editable() const;
  112. virtual bool is_input_port_name_editable() const;
  113. virtual bool is_input_port_type_editable() const;
  114. virtual int get_output_sequence_port_count() const override;
  115. virtual bool has_input_sequence_port() const override;
  116. virtual String get_output_sequence_port_text(int p_port) const override;
  117. virtual int get_input_value_port_count() const override;
  118. virtual int get_output_value_port_count() const override;
  119. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  120. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  121. void add_input_data_port(Variant::Type p_type, const String &p_name, int p_index = -1);
  122. void set_input_data_port_type(int p_idx, Variant::Type p_type);
  123. void set_input_data_port_name(int p_idx, const String &p_name);
  124. void remove_input_data_port(int p_argidx);
  125. void add_output_data_port(Variant::Type p_type, const String &p_name, int p_index = -1);
  126. void set_output_data_port_type(int p_idx, Variant::Type p_type);
  127. void set_output_data_port_name(int p_idx, const String &p_name);
  128. void remove_output_data_port(int p_argidx);
  129. void set_sequenced(bool p_enable);
  130. bool is_sequenced() const;
  131. VisualScriptLists();
  132. };
  133. class VisualScriptComposeArray : public VisualScriptLists {
  134. GDCLASS(VisualScriptComposeArray, VisualScriptLists)
  135. public:
  136. virtual int get_output_sequence_port_count() const override;
  137. virtual bool has_input_sequence_port() const override;
  138. virtual String get_output_sequence_port_text(int p_port) const override;
  139. virtual int get_input_value_port_count() const override;
  140. virtual int get_output_value_port_count() const override;
  141. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  142. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  143. virtual String get_caption() const override;
  144. virtual String get_text() const override;
  145. virtual String get_category() const override { return "functions"; }
  146. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  147. VisualScriptComposeArray();
  148. };
  149. class VisualScriptOperator : public VisualScriptNode {
  150. GDCLASS(VisualScriptOperator, VisualScriptNode);
  151. Variant::Type typed;
  152. Variant::Operator op;
  153. protected:
  154. static void _bind_methods();
  155. public:
  156. virtual int get_output_sequence_port_count() const override;
  157. virtual bool has_input_sequence_port() const override;
  158. virtual String get_output_sequence_port_text(int p_port) const override;
  159. virtual int get_input_value_port_count() const override;
  160. virtual int get_output_value_port_count() const override;
  161. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  162. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  163. virtual String get_caption() const override;
  164. virtual String get_category() const override { return "operators"; }
  165. void set_operator(Variant::Operator p_op);
  166. Variant::Operator get_operator() const;
  167. void set_typed(Variant::Type p_op);
  168. Variant::Type get_typed() const;
  169. static String get_operator_name(Variant::Operator p_op);
  170. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  171. VisualScriptOperator();
  172. };
  173. class VisualScriptSelect : public VisualScriptNode {
  174. GDCLASS(VisualScriptSelect, VisualScriptNode);
  175. Variant::Type typed;
  176. protected:
  177. static void _bind_methods();
  178. public:
  179. virtual int get_output_sequence_port_count() const override;
  180. virtual bool has_input_sequence_port() const override;
  181. virtual String get_output_sequence_port_text(int p_port) const override;
  182. virtual int get_input_value_port_count() const override;
  183. virtual int get_output_value_port_count() const override;
  184. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  185. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  186. virtual String get_caption() const override;
  187. virtual String get_text() const override;
  188. virtual String get_category() const override { return "operators"; }
  189. void set_typed(Variant::Type p_op);
  190. Variant::Type get_typed() const;
  191. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  192. VisualScriptSelect();
  193. };
  194. class VisualScriptVariableGet : public VisualScriptNode {
  195. GDCLASS(VisualScriptVariableGet, VisualScriptNode);
  196. StringName variable;
  197. protected:
  198. void _validate_property(PropertyInfo &p_property) const;
  199. static void _bind_methods();
  200. public:
  201. virtual int get_output_sequence_port_count() const override;
  202. virtual bool has_input_sequence_port() const override;
  203. virtual String get_output_sequence_port_text(int p_port) const override;
  204. virtual int get_input_value_port_count() const override;
  205. virtual int get_output_value_port_count() const override;
  206. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  207. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  208. virtual String get_caption() const override;
  209. virtual String get_category() const override { return "data"; }
  210. void set_variable(StringName p_variable);
  211. StringName get_variable() const;
  212. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  213. VisualScriptVariableGet();
  214. };
  215. class VisualScriptVariableSet : public VisualScriptNode {
  216. GDCLASS(VisualScriptVariableSet, VisualScriptNode);
  217. StringName variable;
  218. protected:
  219. void _validate_property(PropertyInfo &p_property) const;
  220. static void _bind_methods();
  221. public:
  222. virtual int get_output_sequence_port_count() const override;
  223. virtual bool has_input_sequence_port() const override;
  224. virtual String get_output_sequence_port_text(int p_port) const override;
  225. virtual int get_input_value_port_count() const override;
  226. virtual int get_output_value_port_count() const override;
  227. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  228. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  229. virtual String get_caption() const override;
  230. virtual String get_category() const override { return "data"; }
  231. void set_variable(StringName p_variable);
  232. StringName get_variable() const;
  233. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  234. VisualScriptVariableSet();
  235. };
  236. class VisualScriptConstant : public VisualScriptNode {
  237. GDCLASS(VisualScriptConstant, VisualScriptNode);
  238. Variant::Type type;
  239. Variant value;
  240. protected:
  241. void _validate_property(PropertyInfo &p_property) const;
  242. static void _bind_methods();
  243. public:
  244. virtual int get_output_sequence_port_count() const override;
  245. virtual bool has_input_sequence_port() const override;
  246. virtual String get_output_sequence_port_text(int p_port) const override;
  247. virtual int get_input_value_port_count() const override;
  248. virtual int get_output_value_port_count() const override;
  249. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  250. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  251. virtual String get_caption() const override;
  252. virtual String get_category() const override { return "constants"; }
  253. void set_constant_type(Variant::Type p_type);
  254. Variant::Type get_constant_type() const;
  255. void set_constant_value(Variant p_value);
  256. Variant get_constant_value() const;
  257. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  258. VisualScriptConstant();
  259. };
  260. class VisualScriptPreload : public VisualScriptNode {
  261. GDCLASS(VisualScriptPreload, VisualScriptNode);
  262. Ref<Resource> preload;
  263. protected:
  264. static void _bind_methods();
  265. public:
  266. virtual int get_output_sequence_port_count() const override;
  267. virtual bool has_input_sequence_port() const override;
  268. virtual String get_output_sequence_port_text(int p_port) const override;
  269. virtual int get_input_value_port_count() const override;
  270. virtual int get_output_value_port_count() const override;
  271. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  272. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  273. virtual String get_caption() const override;
  274. virtual String get_category() const override { return "data"; }
  275. void set_preload(const Ref<Resource> &p_preload);
  276. Ref<Resource> get_preload() const;
  277. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  278. VisualScriptPreload();
  279. };
  280. class VisualScriptIndexGet : public VisualScriptNode {
  281. GDCLASS(VisualScriptIndexGet, VisualScriptNode);
  282. public:
  283. virtual int get_output_sequence_port_count() const override;
  284. virtual bool has_input_sequence_port() const override;
  285. virtual String get_output_sequence_port_text(int p_port) const override;
  286. virtual int get_input_value_port_count() const override;
  287. virtual int get_output_value_port_count() const override;
  288. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  289. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  290. virtual String get_caption() const override;
  291. virtual String get_category() const override { return "operators"; }
  292. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  293. VisualScriptIndexGet();
  294. };
  295. class VisualScriptIndexSet : public VisualScriptNode {
  296. GDCLASS(VisualScriptIndexSet, VisualScriptNode);
  297. public:
  298. virtual int get_output_sequence_port_count() const override;
  299. virtual bool has_input_sequence_port() const override;
  300. virtual String get_output_sequence_port_text(int p_port) const override;
  301. virtual int get_input_value_port_count() const override;
  302. virtual int get_output_value_port_count() const override;
  303. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  304. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  305. virtual String get_caption() const override;
  306. virtual String get_category() const override { return "operators"; }
  307. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  308. VisualScriptIndexSet();
  309. };
  310. class VisualScriptGlobalConstant : public VisualScriptNode {
  311. GDCLASS(VisualScriptGlobalConstant, VisualScriptNode);
  312. int index;
  313. static void _bind_methods();
  314. public:
  315. virtual int get_output_sequence_port_count() const override;
  316. virtual bool has_input_sequence_port() const override;
  317. virtual String get_output_sequence_port_text(int p_port) const override;
  318. virtual int get_input_value_port_count() const override;
  319. virtual int get_output_value_port_count() const override;
  320. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  321. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  322. virtual String get_caption() const override;
  323. virtual String get_category() const override { return "constants"; }
  324. void set_global_constant(int p_which);
  325. int get_global_constant();
  326. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  327. VisualScriptGlobalConstant();
  328. };
  329. class VisualScriptClassConstant : public VisualScriptNode {
  330. GDCLASS(VisualScriptClassConstant, VisualScriptNode);
  331. StringName base_type;
  332. StringName name;
  333. protected:
  334. static void _bind_methods();
  335. void _validate_property(PropertyInfo &p_property) const;
  336. public:
  337. virtual int get_output_sequence_port_count() const override;
  338. virtual bool has_input_sequence_port() const override;
  339. virtual String get_output_sequence_port_text(int p_port) const override;
  340. virtual int get_input_value_port_count() const override;
  341. virtual int get_output_value_port_count() const override;
  342. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  343. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  344. virtual String get_caption() const override;
  345. virtual String get_category() const override { return "constants"; }
  346. void set_class_constant(const StringName &p_which);
  347. StringName get_class_constant();
  348. void set_base_type(const StringName &p_which);
  349. StringName get_base_type();
  350. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  351. VisualScriptClassConstant();
  352. };
  353. class VisualScriptBasicTypeConstant : public VisualScriptNode {
  354. GDCLASS(VisualScriptBasicTypeConstant, VisualScriptNode);
  355. Variant::Type type;
  356. StringName name;
  357. protected:
  358. static void _bind_methods();
  359. void _validate_property(PropertyInfo &p_property) const;
  360. public:
  361. virtual int get_output_sequence_port_count() const override;
  362. virtual bool has_input_sequence_port() const override;
  363. virtual String get_output_sequence_port_text(int p_port) const override;
  364. virtual int get_input_value_port_count() const override;
  365. virtual int get_output_value_port_count() const override;
  366. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  367. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  368. virtual String get_caption() const override;
  369. virtual String get_text() const override;
  370. virtual String get_category() const override { return "constants"; }
  371. void set_basic_type_constant(const StringName &p_which);
  372. StringName get_basic_type_constant() const;
  373. void set_basic_type(Variant::Type p_which);
  374. Variant::Type get_basic_type() const;
  375. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  376. VisualScriptBasicTypeConstant();
  377. };
  378. class VisualScriptMathConstant : public VisualScriptNode {
  379. GDCLASS(VisualScriptMathConstant, VisualScriptNode);
  380. public:
  381. enum MathConstant {
  382. MATH_CONSTANT_ONE,
  383. MATH_CONSTANT_PI,
  384. MATH_CONSTANT_HALF_PI,
  385. MATH_CONSTANT_TAU,
  386. MATH_CONSTANT_E,
  387. MATH_CONSTANT_SQRT2,
  388. MATH_CONSTANT_INF,
  389. MATH_CONSTANT_NAN,
  390. MATH_CONSTANT_MAX
  391. };
  392. private:
  393. static const char *const_name[MATH_CONSTANT_MAX];
  394. static double const_value[MATH_CONSTANT_MAX];
  395. MathConstant constant;
  396. protected:
  397. static void _bind_methods();
  398. public:
  399. virtual int get_output_sequence_port_count() const override;
  400. virtual bool has_input_sequence_port() const override;
  401. virtual String get_output_sequence_port_text(int p_port) const override;
  402. virtual int get_input_value_port_count() const override;
  403. virtual int get_output_value_port_count() const override;
  404. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  405. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  406. virtual String get_caption() const override;
  407. virtual String get_category() const override { return "constants"; }
  408. void set_math_constant(MathConstant p_which);
  409. MathConstant get_math_constant();
  410. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  411. VisualScriptMathConstant();
  412. };
  413. VARIANT_ENUM_CAST(VisualScriptMathConstant::MathConstant)
  414. class VisualScriptEngineSingleton : public VisualScriptNode {
  415. GDCLASS(VisualScriptEngineSingleton, VisualScriptNode);
  416. String singleton;
  417. protected:
  418. void _validate_property(PropertyInfo &p_property) const;
  419. static void _bind_methods();
  420. public:
  421. virtual int get_output_sequence_port_count() const override;
  422. virtual bool has_input_sequence_port() const override;
  423. virtual String get_output_sequence_port_text(int p_port) const override;
  424. virtual int get_input_value_port_count() const override;
  425. virtual int get_output_value_port_count() const override;
  426. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  427. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  428. virtual String get_caption() const override;
  429. virtual String get_category() const override { return "data"; }
  430. void set_singleton(const String &p_string);
  431. String get_singleton();
  432. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  433. virtual TypeGuess guess_output_type(TypeGuess *p_inputs, int p_output) const override;
  434. VisualScriptEngineSingleton();
  435. };
  436. class VisualScriptSceneNode : public VisualScriptNode {
  437. GDCLASS(VisualScriptSceneNode, VisualScriptNode);
  438. NodePath path;
  439. protected:
  440. void _validate_property(PropertyInfo &p_property) const;
  441. static void _bind_methods();
  442. public:
  443. virtual int get_output_sequence_port_count() const override;
  444. virtual bool has_input_sequence_port() const override;
  445. virtual String get_output_sequence_port_text(int p_port) const override;
  446. virtual int get_input_value_port_count() const override;
  447. virtual int get_output_value_port_count() const override;
  448. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  449. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  450. virtual String get_caption() const override;
  451. virtual String get_category() const override { return "data"; }
  452. void set_node_path(const NodePath &p_path);
  453. NodePath get_node_path();
  454. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  455. virtual TypeGuess guess_output_type(TypeGuess *p_inputs, int p_output) const override;
  456. VisualScriptSceneNode();
  457. };
  458. class VisualScriptSceneTree : public VisualScriptNode {
  459. GDCLASS(VisualScriptSceneTree, VisualScriptNode);
  460. protected:
  461. void _validate_property(PropertyInfo &p_property) const;
  462. static void _bind_methods();
  463. public:
  464. virtual int get_output_sequence_port_count() const override;
  465. virtual bool has_input_sequence_port() const override;
  466. virtual String get_output_sequence_port_text(int p_port) const override;
  467. virtual int get_input_value_port_count() const override;
  468. virtual int get_output_value_port_count() const override;
  469. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  470. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  471. virtual String get_caption() const override;
  472. virtual String get_category() const override { return "data"; }
  473. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  474. virtual TypeGuess guess_output_type(TypeGuess *p_inputs, int p_output) const override;
  475. VisualScriptSceneTree();
  476. };
  477. class VisualScriptResourcePath : public VisualScriptNode {
  478. GDCLASS(VisualScriptResourcePath, VisualScriptNode);
  479. String path;
  480. protected:
  481. static void _bind_methods();
  482. public:
  483. virtual int get_output_sequence_port_count() const override;
  484. virtual bool has_input_sequence_port() const override;
  485. virtual String get_output_sequence_port_text(int p_port) const override;
  486. virtual int get_input_value_port_count() const override;
  487. virtual int get_output_value_port_count() const override;
  488. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  489. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  490. virtual String get_caption() const override;
  491. virtual String get_category() const override { return "data"; }
  492. void set_resource_path(const String &p_path);
  493. String get_resource_path();
  494. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  495. VisualScriptResourcePath();
  496. };
  497. class VisualScriptSelf : public VisualScriptNode {
  498. GDCLASS(VisualScriptSelf, VisualScriptNode);
  499. protected:
  500. static void _bind_methods();
  501. public:
  502. virtual int get_output_sequence_port_count() const override;
  503. virtual bool has_input_sequence_port() const override;
  504. virtual String get_output_sequence_port_text(int p_port) const override;
  505. virtual int get_input_value_port_count() const override;
  506. virtual int get_output_value_port_count() const override;
  507. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  508. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  509. virtual String get_caption() const override;
  510. virtual String get_category() const override { return "data"; }
  511. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  512. virtual TypeGuess guess_output_type(TypeGuess *p_inputs, int p_output) const override;
  513. VisualScriptSelf();
  514. };
  515. class VisualScriptCustomNode : public VisualScriptNode {
  516. GDCLASS(VisualScriptCustomNode, VisualScriptNode);
  517. protected:
  518. static void _bind_methods();
  519. friend class VisualScriptNodeInstanceCustomNode;
  520. GDVIRTUAL0RC(int, _get_output_sequence_port_count)
  521. GDVIRTUAL0RC(bool, _has_input_sequence_port)
  522. GDVIRTUAL1RC(String, _get_output_sequence_port_text, int)
  523. GDVIRTUAL0RC(int, _get_input_value_port_count)
  524. GDVIRTUAL1RC(int, _get_input_value_port_type, int)
  525. GDVIRTUAL1RC(String, _get_input_value_port_name, int)
  526. GDVIRTUAL1RC(int, _get_input_value_port_hint, int)
  527. GDVIRTUAL1RC(String, _get_input_value_port_hint_string, int)
  528. GDVIRTUAL0RC(int, _get_output_value_port_count)
  529. GDVIRTUAL1RC(int, _get_output_value_port_type, int)
  530. GDVIRTUAL1RC(String, _get_output_value_port_name, int)
  531. GDVIRTUAL1RC(int, _get_output_value_port_hint, int)
  532. GDVIRTUAL1RC(String, _get_output_value_port_hint_string, int)
  533. GDVIRTUAL0RC(String, _get_caption)
  534. GDVIRTUAL0RC(String, _get_text)
  535. GDVIRTUAL0RC(String, _get_category)
  536. GDVIRTUAL0RC(int, _get_working_memory_size)
  537. GDVIRTUAL4RC(Variant, _step, Array, Array, int, Array)
  538. public:
  539. enum StartMode { //replicated for step
  540. START_MODE_BEGIN_SEQUENCE,
  541. START_MODE_CONTINUE_SEQUENCE,
  542. START_MODE_RESUME_YIELD
  543. };
  544. enum { //replicated for step
  545. STEP_SHIFT = 1 << 24,
  546. STEP_MASK = STEP_SHIFT - 1,
  547. STEP_PUSH_STACK_BIT = STEP_SHIFT, //push bit to stack
  548. STEP_GO_BACK_BIT = STEP_SHIFT << 1, //go back to previous node
  549. STEP_NO_ADVANCE_BIT = STEP_SHIFT << 2, //do not advance past this node
  550. STEP_EXIT_FUNCTION_BIT = STEP_SHIFT << 3, //return from function
  551. STEP_YIELD_BIT = STEP_SHIFT << 4, //yield (will find VisualScriptFunctionState state in first working memory)
  552. };
  553. virtual int get_output_sequence_port_count() const override;
  554. virtual bool has_input_sequence_port() const override;
  555. virtual String get_output_sequence_port_text(int p_port) const override;
  556. virtual int get_input_value_port_count() const override;
  557. virtual int get_output_value_port_count() const override;
  558. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  559. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  560. virtual String get_caption() const override;
  561. virtual String get_text() const override;
  562. virtual String get_category() const override;
  563. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  564. virtual TypeGuess guess_output_type(TypeGuess *p_inputs, int p_output) const override;
  565. void _script_changed();
  566. VisualScriptCustomNode();
  567. };
  568. VARIANT_ENUM_CAST(VisualScriptCustomNode::StartMode);
  569. class VisualScriptSubCall : public VisualScriptNode {
  570. GDCLASS(VisualScriptSubCall, VisualScriptNode);
  571. protected:
  572. static void _bind_methods();
  573. public:
  574. virtual int get_output_sequence_port_count() const override;
  575. virtual bool has_input_sequence_port() const override;
  576. virtual String get_output_sequence_port_text(int p_port) const override;
  577. virtual int get_input_value_port_count() const override;
  578. virtual int get_output_value_port_count() const override;
  579. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  580. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  581. virtual String get_caption() const override;
  582. virtual String get_text() const override;
  583. virtual String get_category() const override;
  584. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  585. VisualScriptSubCall();
  586. };
  587. class VisualScriptComment : public VisualScriptNode {
  588. GDCLASS(VisualScriptComment, VisualScriptNode);
  589. String title;
  590. String description;
  591. Size2 size;
  592. protected:
  593. static void _bind_methods();
  594. public:
  595. virtual int get_output_sequence_port_count() const override;
  596. virtual bool has_input_sequence_port() const override;
  597. virtual String get_output_sequence_port_text(int p_port) const override;
  598. virtual int get_input_value_port_count() const override;
  599. virtual int get_output_value_port_count() const override;
  600. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  601. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  602. virtual String get_caption() const override;
  603. virtual String get_text() const override;
  604. virtual String get_category() const override;
  605. void set_title(const String &p_title);
  606. String get_title() const;
  607. void set_description(const String &p_description);
  608. String get_description() const;
  609. void set_size(const Size2 &p_size);
  610. Size2 get_size() const;
  611. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  612. VisualScriptComment();
  613. };
  614. class VisualScriptConstructor : public VisualScriptNode {
  615. GDCLASS(VisualScriptConstructor, VisualScriptNode);
  616. Variant::Type type;
  617. MethodInfo constructor;
  618. protected:
  619. static void _bind_methods();
  620. public:
  621. virtual int get_output_sequence_port_count() const override;
  622. virtual bool has_input_sequence_port() const override;
  623. virtual String get_output_sequence_port_text(int p_port) const override;
  624. virtual int get_input_value_port_count() const override;
  625. virtual int get_output_value_port_count() const override;
  626. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  627. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  628. virtual String get_caption() const override;
  629. virtual String get_category() const override;
  630. void set_constructor_type(Variant::Type p_type);
  631. Variant::Type get_constructor_type() const;
  632. void set_constructor(const Dictionary &p_info);
  633. Dictionary get_constructor() const;
  634. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  635. VisualScriptConstructor();
  636. };
  637. class VisualScriptLocalVar : public VisualScriptNode {
  638. GDCLASS(VisualScriptLocalVar, VisualScriptNode);
  639. StringName name;
  640. Variant::Type type;
  641. protected:
  642. static void _bind_methods();
  643. public:
  644. virtual int get_output_sequence_port_count() const override;
  645. virtual bool has_input_sequence_port() const override;
  646. virtual String get_output_sequence_port_text(int p_port) const override;
  647. virtual int get_input_value_port_count() const override;
  648. virtual int get_output_value_port_count() const override;
  649. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  650. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  651. virtual String get_caption() const override;
  652. virtual String get_category() const override;
  653. void set_var_name(const StringName &p_name);
  654. StringName get_var_name() const;
  655. void set_var_type(Variant::Type p_type);
  656. Variant::Type get_var_type() const;
  657. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  658. VisualScriptLocalVar();
  659. };
  660. class VisualScriptLocalVarSet : public VisualScriptNode {
  661. GDCLASS(VisualScriptLocalVarSet, VisualScriptNode);
  662. StringName name;
  663. Variant::Type type;
  664. protected:
  665. static void _bind_methods();
  666. public:
  667. virtual int get_output_sequence_port_count() const override;
  668. virtual bool has_input_sequence_port() const override;
  669. virtual String get_output_sequence_port_text(int p_port) const override;
  670. virtual int get_input_value_port_count() const override;
  671. virtual int get_output_value_port_count() const override;
  672. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  673. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  674. virtual String get_caption() const override;
  675. virtual String get_text() const override;
  676. virtual String get_category() const override;
  677. void set_var_name(const StringName &p_name);
  678. StringName get_var_name() const;
  679. void set_var_type(Variant::Type p_type);
  680. Variant::Type get_var_type() const;
  681. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  682. VisualScriptLocalVarSet();
  683. };
  684. class VisualScriptInputAction : public VisualScriptNode {
  685. GDCLASS(VisualScriptInputAction, VisualScriptNode);
  686. public:
  687. enum Mode {
  688. MODE_PRESSED,
  689. MODE_RELEASED,
  690. MODE_JUST_PRESSED,
  691. MODE_JUST_RELEASED,
  692. };
  693. StringName name;
  694. Mode mode;
  695. protected:
  696. void _validate_property(PropertyInfo &p_property) const;
  697. static void _bind_methods();
  698. public:
  699. virtual int get_output_sequence_port_count() const override;
  700. virtual bool has_input_sequence_port() const override;
  701. virtual String get_output_sequence_port_text(int p_port) const override;
  702. virtual int get_input_value_port_count() const override;
  703. virtual int get_output_value_port_count() const override;
  704. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  705. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  706. virtual String get_caption() const override;
  707. virtual String get_category() const override;
  708. void set_action_name(const StringName &p_name);
  709. StringName get_action_name() const;
  710. void set_action_mode(Mode p_mode);
  711. Mode get_action_mode() const;
  712. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  713. VisualScriptInputAction();
  714. };
  715. VARIANT_ENUM_CAST(VisualScriptInputAction::Mode)
  716. class VisualScriptDeconstruct : public VisualScriptNode {
  717. GDCLASS(VisualScriptDeconstruct, VisualScriptNode);
  718. struct Element {
  719. StringName name;
  720. Variant::Type type;
  721. };
  722. Vector<Element> elements;
  723. void _update_elements();
  724. Variant::Type type;
  725. void _set_elem_cache(const Array &p_elements);
  726. Array _get_elem_cache() const;
  727. void _validate_property(PropertyInfo &p_property) const;
  728. protected:
  729. static void _bind_methods();
  730. public:
  731. virtual int get_output_sequence_port_count() const override;
  732. virtual bool has_input_sequence_port() const override;
  733. virtual String get_output_sequence_port_text(int p_port) const override;
  734. virtual int get_input_value_port_count() const override;
  735. virtual int get_output_value_port_count() const override;
  736. virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
  737. virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
  738. virtual String get_caption() const override;
  739. virtual String get_category() const override;
  740. void set_deconstruct_type(Variant::Type p_type);
  741. Variant::Type get_deconstruct_type() const;
  742. virtual VisualScriptNodeInstance *instantiate(VisualScriptInstance *p_instance) override;
  743. VisualScriptDeconstruct();
  744. };
  745. void register_visual_script_nodes();
  746. void unregister_visual_script_nodes();
  747. #endif // VISUAL_SCRIPT_NODES_H