CCPUScriptTranslator.h 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347
  1. /****************************************************************************
  2. Copyright (C) 2013 Henry van Merode. All rights reserved.
  3. Copyright (c) 2015-2017 Chukong Technologies Inc.
  4. http://www.cocos2d-x.org
  5. Permission is hereby granted, free of charge, to any person obtaining a copy
  6. of this software and associated documentation files (the "Software"), to deal
  7. in the Software without restriction, including without limitation the rights
  8. to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  9. copies of the Software, and to permit persons to whom the Software is
  10. furnished to do so, subject to the following conditions:
  11. The above copyright notice and this permission notice shall be included in
  12. all copies or substantial portions of the Software.
  13. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  14. IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  15. FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  16. AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  17. LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  18. OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  19. THE SOFTWARE.
  20. ****************************************************************************/
  21. #ifndef __CC_PU_SCRIPT_TRANSLATOR_H__
  22. #define __CC_PU_SCRIPT_TRANSLATOR_H__
  23. #include <iostream>
  24. #include "base/CCRef.h"
  25. #include "math/CCMath.h"
  26. #include "extensions/Particle3D/PU/CCPUScriptCompiler.h"
  27. NS_CC_BEGIN
  28. // Define static tokens
  29. enum eDefineStaticToken
  30. {
  31. // Generic
  32. TOKEN_GROUP_MASK,
  33. TOKEN_ACCELERATION,
  34. TOKEN_MAX_INCREMENT,
  35. TOKEN_MIN_INCREMENT,
  36. TOKEN_ITERATIONS,
  37. TOKEN_COLOUR_CHANGE,
  38. TOKEN_INITIAL_COLOUR,
  39. TOKEN_RANDOM_INITIAL_COLOUR,
  40. TOKEN_USE_VERTEX_COLOURS,
  41. TOKEN_USE_OWN_ROTATION,
  42. TOKEN_MAX_DEVIATION,
  43. TOKEN_TIME_STEP,
  44. TOKEN_BOX_WIDTH,
  45. TOKEN_BOX_HEIGHT,
  46. TOKEN_BOX_DEPTH,
  47. TOKEN_VELOCITY,
  48. TOKEN_SPEED,
  49. TOKEN_ROTATION_SPEED,
  50. TOKEN_ROTATION,
  51. TOKEN_ROTATION_AXIS,
  52. TOKEN_NORMAL,
  53. TOKEN_STEP,
  54. TOKEN_NUMBER_OF_SEGMENTS,
  55. TOKEN_MAX_ELEMENTS,
  56. TOKEN_UPDATE_INTERVAL,
  57. TOKEN_DISTANCE_THRESHOLD,
  58. TOKEN_MATERIAL,
  59. TOKEN_MESH_NAME,
  60. TOKEN_RADIUS,
  61. TOKEN_ENABLED,
  62. TOKEN_POSITION,
  63. TOKEN_KEEP_LOCAL,
  64. TOKEN_LESS_THAN,
  65. TOKEN_GREATER_THAN,
  66. TOKEN_EQUALS,
  67. TOKEN_VISUAL_PARTICLE,
  68. TOKEN_EMITTER_PARTICLE,
  69. TOKEN_AFFECTOR_PARTICLE,
  70. TOKEN_TECHNIQUE_PARTICLE,
  71. TOKEN_SYSTEM_PARTICLE,
  72. TOKEN_POINT,
  73. TOKEN_VERTEX,
  74. TOKEN_INCREASE,
  75. TOKEN_ALIAS,
  76. TOKEN_USE_ALIAS,
  77. TOKEN_SINCE_START_SYSTEM,
  78. // Particle System
  79. TOKEN_SYSTEM,
  80. TOKEN_PS_ITERATION_INTERVAL,
  81. TOKEN_PS_NONVIS_UPDATE_TIMEOUT,
  82. TOKEN_PS_FIXED_TIMEOUT,
  83. TOKEN_PS_LOD_DISTANCES,
  84. TOKEN_PS_MAIN_CAMERA_NAME,
  85. TOKEN_PS_SMOOTH_LOD,
  86. TOKEN_PS_FAST_FORWARD,
  87. TOKEN_PS_SCALE,
  88. TOKEN_PS_SCALE_VELOCITY,
  89. TOKEN_PS_SCALE_TIME,
  90. TOKEN_PS_TIGHT_BOUNDING_BOX,
  91. TOKEN_PS_CATEGORY,
  92. // Particle Technique
  93. TOKEN_TECHNIQUE,
  94. TOKEN_TECH_VISUAL_PARTICLE_QUOTA,
  95. TOKEN_TECH_EMITTED_EMITTER_QUOTA,
  96. TOKEN_TECH_EMITTED_AFFECTOR_QUOTA,
  97. TOKEN_TECH_EMITTED_TECHNIQUE_QUOTA,
  98. TOKEN_TECH_EMITTED_SYSTEM_QUOTA,
  99. TOKEN_TECH_LOD_INDEX,
  100. TOKEN_TECH_DEFAULT_PARTICLE_WIDTH,
  101. TOKEN_TECH_DEFAULT_PARTICLE_HEIGHT,
  102. TOKEN_TECH_DEFAULT_PARTICLE_DEPTH,
  103. TOKEN_TECH_SPHASHING_CELL_DIMENSION,
  104. TOKEN_TECH_SPHASHING_CELL_OVERLAP,
  105. TOKEN_TECH_SPHASHING_SIZE,
  106. TOKEN_TECH_SPHASHING_UPDATE_INTERVAL,
  107. TOKEN_TECH_MAX_VELOCITY,
  108. // Particle Renderer
  109. TOKEN_RENDERER,
  110. TOKEN_RENDERER_Q_GROUP,
  111. TOKEN_RENDERER_SORTING,
  112. TOKEN_RENDERER_TEXCOORDS_DEFINE,
  113. TOKEN_RENDERER_TEXCOORDS_ROWS,
  114. TOKEN_RENDERER_TEXCOORDS_SET,
  115. TOKEN_RENDERER_TEXCOORDS_COLUMNS,
  116. TOKEN_RENDERER_USE_SOFT_PARTICLES,
  117. TOKEN_RENDERER_SOFT_PARTICLES_CONTRAST_POWER,
  118. TOKEN_RENDERER_SOFT_PARTICLES_SCALE,
  119. TOKEN_RENDERER_SOFT_PARTICLES_DELTA,
  120. // Particle Emitter
  121. TOKEN_EMITTER,
  122. TOKEN_EMITTER_DIRECTION,
  123. TOKEN_EMITTER_ORIENTATION,
  124. TOKEN_EMITTER_ORIENTATION_RANGE_START,
  125. TOKEN_EMITTER_ORIENTATION_RANGE_END,
  126. TOKEN_EMITTER_START_ORIENTATION_RANGE,
  127. TOKEN_EMITTER_END_ORIENTATION_RANGE,
  128. TOKEN_EMITTER_DURATION,
  129. TOKEN_EMITTER_REPEAT_DELAY,
  130. TOKEN_EMITTER_EMITS,
  131. TOKEN_ANGLE,
  132. TOKEN_EMITTER_EMISSION_RATE,
  133. TOKEN_TIME_TO_LIVE,
  134. TOKEN_EMITTER_MASS,
  135. TOKEN_EMITTER_START_TEXCOORDS,
  136. TOKEN_EMITTER_END_TEXCOORDS,
  137. TOKEN_EMITTER_START_TEXCOORDS_RANGE,
  138. TOKEN_EMITTER_END_TEXCOORDS_RANGE,
  139. TOKEN_EMITTER_TEXCOORDS,
  140. TOKEN_EMITTER_START_COLOUR_RANGE,
  141. TOKEN_EMITTER_END_COLOUR_RANGE,
  142. TOKEN_EMITTER_COLOUR,
  143. TOKEN_EMITTER_ALL_PARTICLE_DIM,
  144. TOKEN_EMITTER_PARTICLE_WIDTH,
  145. TOKEN_EMITTER_PARTICLE_HEIGHT,
  146. TOKEN_EMITTER_PARTICLE_DEPTH,
  147. TOKEN_EMITTER_AUTO_DIRECTION,
  148. TOKEN_EMITTER_FORCE_EMISSION,
  149. // Particle Affector
  150. TOKEN_AFFECTOR,
  151. TOKEN_AFFECTOR_MASS,
  152. TOKEN_AFFECTOR_EXCLUDE_EMITTER,
  153. TOKEN_AFFECTOR_SPECIALISATION,
  154. TOKEN_AFFECTOR_SPEC_DEFAULT,
  155. TOKEN_AFFECTOR_SPEC_TTL_INCREASE,
  156. TOKEN_AFFECTOR_SPEC_TTL_DECREASE,
  157. // Particle Observer
  158. TOKEN_OBSERVER,
  159. TOKEN_OBSERVE_PARTICLE_TYPE,
  160. TOKEN_OBSERVE_INTERVAL,
  161. TOKEN_OBSERVE_UNTIL_EVENT,
  162. // Particle Event Handler
  163. TOKEN_HANDLER,
  164. // Particle Behaviour
  165. TOKEN_BEHAVIOUR,
  166. // Extern
  167. TOKEN_EXTERN,
  168. TOKEN_EXTERN_DISTANCE_THRESHOLD,
  169. // Dynamic Attribute
  170. TOKEN_DYN_CONTROL_POINT,
  171. TOKEN_DYN_MIN,
  172. TOKEN_DYN_MAX,
  173. TOKEN_DYN_OSCILLATE_FREQUENCY,
  174. TOKEN_DYN_OSCILLATE_PHASE,
  175. TOKEN_DYN_OSCILLATE_BASE,
  176. TOKEN_DYN_OSCILLATE_AMPLITUDE,
  177. TOKEN_DYN_OSCILLATE_TYPE,
  178. TOKEN_DYN_OSCILLATE,
  179. TOKEN_DYN_RANDOM,
  180. TOKEN_DYN_CURVED_LINEAR,
  181. TOKEN_DYN_CURVED_SPLINE,
  182. TOKEN_DYN_SINE,
  183. TOKEN_DYN_SQUARE,
  184. // CameraDependency (unused)
  185. TOKEN_CAMERA_DEPENDENCY,
  186. // BeamRenderer
  187. TOKEN_BEAMRENDERER_UPDATE_INTERVAL,
  188. TOKEN_BEAMRENDERER_MAX_ELEMENTS,
  189. TOKEN_BEAMRENDERER_DEVIATION,
  190. TOKEN_BEAMRENDERER_NUMBER_OF_SEGMENTS,
  191. TOKEN_BEAMRENDERER_JUMP,
  192. TOKEN_BEAMRENDERER_TEXCOORD_DIRECTION,
  193. TOKEN_BEAMRENDERER_VERTEX_COLOURS,
  194. TOKEN_BEAMRENDERER_TCD_U,
  195. TOKEN_BEAMRENDERER_TCD_V,
  196. // BillboardRenderer
  197. TOKEN_BILLBOARD_TYPE,
  198. TOKEN_BILLBOARD_ORIGIN,
  199. TOKEN_BILLBOARD_ROTATION_TYPE,
  200. TOKEN_BILLBOARD_COMMON_DIRECTION,
  201. TOKEN_BILLBOARD_COMMON_UP_VECTOR,
  202. TOKEN_BILLBOARD_POINT_RENDERING,
  203. TOKEN_BILLBOARD_ACCURATE_FACING,
  204. TOKEN_BILLBOARD_ORIENTED_COMMON,
  205. TOKEN_BILLBOARD_ORIENTED_SELF,
  206. TOKEN_BILLBOARD_ORIENTED_SHAPE,
  207. TOKEN_BILLBOARD_PERPENDICULAR_COMMON,
  208. TOKEN_BILLBOARD_PERPENDICULAR_SELF,
  209. TOKEN_BILLBOARD_TOP_LEFT,
  210. TOKEN_BILLBOARD_TOP_CENTER,
  211. TOKEN_BILLBOARD_TOP_RIGHT,
  212. TOKEN_BILLBOARD_CENTER_LEFT,
  213. TOKEN_BILLBOARD_CENTER_RIGHT,
  214. TOKEN_BILLBOARD_CENTER,
  215. TOKEN_BILLBOARD_BOTTON_LEFT,
  216. TOKEN_BILLBOARD_BOTTOM_CENTER,
  217. TOKEN_BILLBOARD_BOTTOM_RIGHT,
  218. TOKEN_BILLBOARD_TEXCOORD,
  219. // EntityRenderer
  220. TOKEN_ENT_MESH_NAME,
  221. TOKEN_ENT_ORIENTATION_TYPE,
  222. TOKEN_ENT_ORIENTED_SELF,
  223. TOKEN_ENT_ORIENTED_SELF_MIRRORED,
  224. TOKEN_ENT_ORIENTED_SHAPE,
  225. // LightRenderer
  226. TOKEN_LIGHT_TYPE,
  227. TOKEN_LIGHT_RENDER_QUEUE,
  228. TOKEN_LIGHT_SPECULAR,
  229. TOKEN_LIGHT_ATT_RANGE,
  230. TOKEN_LIGHT_ATT_CONSTANT,
  231. TOKEN_LIGHT_ATT_LINEAR,
  232. TOKEN_LIGHT_ATT_QUADRATIC,
  233. TOKEN_LIGHT_SPOT_INNER,
  234. TOKEN_LIGHT_SPOT_OUTER,
  235. TOKEN_LIGHT_FALLOFF,
  236. TOKEN_LIGHT_POWERSCALE,
  237. TOKEN_LIGHT_SPOT,
  238. TOKEN_FLASH_FREQUENCY,
  239. TOKEN_FLASH_LENGTH,
  240. TOKEN_FLASH_RANDOM,
  241. // RibbonTrailRenderer
  242. TOKEN_RIBBONTRAIL_VERTEX_COLOURS,
  243. TOKEN_RIBBONTRAIL_MAX_ELEMENTS,
  244. TOKEN_RIBBONTRAIL_LENGTH,
  245. TOKEN_RIBBONTRAIL_WIDTH,
  246. TOKEN_RIBBONTRAIL_RANDOM_INITIAL_COLOUR,
  247. TOKEN_RIBBONTRAIL_INITIAL_COLOUR,
  248. TOKEN_RIBBONTRAIL_COLOUR_CHANGE,
  249. // BoxEmitter
  250. TOKEN_EMITTER_BOX_WIDTH,
  251. TOKEN_EMITTER_BOX_HEIGHT,
  252. TOKEN_EMITTER_BOX_DEPTH,
  253. // CircleEmitter
  254. TOKEN_CIRCLE_RADIUS,
  255. TOKEN_CIRCLE_STEP,
  256. TOKEN_CIRCLE_ANGLE,
  257. TOKEN_CIRCLE_RANDOM,
  258. TOKEN_EMIT_RANDOM,
  259. TOKEN_CIRCLE_NORMAL,
  260. // LineEmitter
  261. TOKEN_LINE_EMIT_END,
  262. TOKEN_LINE_EMIT_MAX_INCREMENT,
  263. TOKEN_LINE_EMIT_MIN_INCREMENT,
  264. TOKEN_LINE_EMIT_MAX_DEVIATION,
  265. // MeshSurfaceEmitter
  266. TOKEN_MESH_SURFACE_NAME,
  267. TOKEN_MESH_SURFACE_DISTRIBUTION,
  268. TOKEN_MESH_SURFACE_MESH_SCALE,
  269. TOKEN_MESH_SURFACE_EDGE,
  270. TOKEN_MESH_SURFACE_HETEROGENEOUS_1,
  271. TOKEN_MESH_SURFACE_HETEROGENEOUS_2,
  272. TOKEN_MESH_SURFACE_HOMOGENEOUS,
  273. // PositionEmitter
  274. TOKEN_POS_ADD_POSITION,
  275. TOKEN_POS_RANDOMIZE,
  276. // SlaveEmitter
  277. TOKEN_MASTER_TECHNIQUE,
  278. TOKEN_MASTER_EMITTER,
  279. // SphereSurfaceEmitter
  280. TOKEN_SPHERE_RADIUS,
  281. // VertexEmitter
  282. TOKEN_VERTEX_STEP,
  283. TOKEN_VERTEX_SEGMENTS,
  284. TOKEN_VERTEX_ITERATIONS,
  285. TOKEN_VERTEX_MESH_NAME,
  286. // AlignAffector
  287. TOKEN_ALIGN_RESIZE,
  288. TOKEN_RESIZE,
  289. // BoxCollider
  290. TOKEN_BOXCOLL_WIDTH,
  291. TOKEN_BOXCOLL_HEIGHT,
  292. TOKEN_BOXCOLL_DEPTH,
  293. // BaseCollider
  294. TOKEN_FRICTION,
  295. TOKEN_BOUNCYNESS,
  296. TOKEN_INTERSECTION,
  297. TOKEN_COLLIDER_FRICTION,
  298. TOKEN_COLLIDER_BOUNCYNESS,
  299. TOKEN_COLLIDER_INTERSECTION,
  300. TOKEN_COLLIDER_COLLISION_TYPE,
  301. TOKEN_COLLIDER_BOUNCE,
  302. TOKEN_COLLIDER_FLOW,
  303. TOKEN_COLLIDER_NONE,
  304. TOKEN_COLLIDER_INTERSECTION_POINT,
  305. TOKEN_COLLIDER_INTERSECTION_BOX,
  306. TOKEN_INNER_COLLISION,
  307. // CollisionAvoidanceAffector
  308. TOKEN_AVOIDANCE_RADIUS,
  309. // ColourAffector
  310. TOKEN_TIME_COLOUR,
  311. TOKEN_COLOUR_TIME_COLOUR,
  312. TOKEN_COLOUR_OPERATION,
  313. TOKEN_COLOUR_MULTIPLY,
  314. TOKEN_COLOUR_SET,
  315. // BaseForceAffector
  316. TOKEN_FORCE_VECTOR,
  317. TOKEN_FORCE_APPLICATION,
  318. TOKEN_FORCE_AFF_VECTOR,
  319. TOKEN_FORCE_AFF_APPLICATION,
  320. TOKEN_FORCE_ADD,
  321. TOKEN_FORCE_AVERAGE,
  322. // ForceFieldAffector
  323. TOKEN_FORCEFIELD_TYPE,
  324. TOKEN_REALTIME,
  325. TOKEN_MATRIX,
  326. TOKEN_DELTA,
  327. TOKEN_FORCE,
  328. TOKEN_OCTAVES,
  329. TOKEN_FREQUENCY,
  330. TOKEN_AMPLITUDE,
  331. TOKEN_PERSISTENCE,
  332. TOKEN_FORCEFIELDSIZE,
  333. TOKEN_WORLDSIZE,
  334. TOKEN_IGNORE_NEGATIVE_X,
  335. TOKEN_IGNORE_NEGATIVE_Y,
  336. TOKEN_IGNORE_NEGATIVE_Z,
  337. TOKEN_MOVEMENT,
  338. TOKEN_MOVEMENT_FREQUENCY,
  339. // GeometryRotator
  340. TOKEN_GEOMROT_USE_OWN_ROTATION,
  341. TOKEN_GEOMROT_ROTATION_SPEED,
  342. TOKEN_GEOMROT_ROTATION_AXIS,
  343. // GravityAffector
  344. TOKEN_GRAVITY,
  345. // InterParticleCollider
  346. TOKEN_ADJUSTMENT,
  347. TOKEN_COLLISION_RESPONSE,
  348. TOKEN_IPC_ADJUSTMENT,
  349. TOKEN_IPC_COLLISION_RESPONSE,
  350. TOKEN_IPC_AVERAGE_VELOCITY,
  351. TOKEN_IPC_ANGLE_BASED_VELOCITY,
  352. // JetAffector
  353. TOKEN_JET_ACCELERATION,
  354. // LineAffector
  355. TOKEN_END,
  356. TOKEN_DRIFT,
  357. TOKEN_LINE_AFF_MAX_DEVIATION,
  358. TOKEN_LINE_AFF_TIME_STEP,
  359. TOKEN_LINE_AFF_END,
  360. TOKEN_LINE_AFF_DRIFT,
  361. // ParticleFollower
  362. TOKEN_FOLLOW_MAX_DISTANCE,
  363. TOKEN_FOLLOW_MIN_DISTANCE,
  364. TOKEN_MAX_DISTANCE,
  365. TOKEN_MIN_DISTANCE,
  366. // PathFollower
  367. TOKEN_PATH_POINT,
  368. // PlaneCollider
  369. TOKEN_PLANECOLL_NORMAL,
  370. // Randomiser
  371. TOKEN_RND_MAX_DEVIATION_X,
  372. TOKEN_RND_MAX_DEVIATION_Y,
  373. TOKEN_RND_MAX_DEVIATION_Z,
  374. TOKEN_MAX_DEVIATION_X,
  375. TOKEN_MAX_DEVIATION_Y,
  376. TOKEN_MAX_DEVIATION_Z,
  377. TOKEN_RND_TIME_STEP,
  378. TOKEN_RND_DIRECTION,
  379. TOKEN_USE_DIRECTION,
  380. // ScaleAffector
  381. TOKEN_SCALE_XYZ_SCALE,
  382. TOKEN_SCALE_X_SCALE,
  383. TOKEN_SCALE_Y_SCALE,
  384. TOKEN_SCALE_Z_SCALE,
  385. // ScaleVelocityAffector
  386. TOKEN_SCALE_VELOCITY_SCALE,
  387. TOKEN_STOP_AT_FLIP,
  388. // SineForceAffector
  389. TOKEN_SINE_MIN_FREQUENCY,
  390. TOKEN_SINE_MAX_FREQUENCY,
  391. TOKEN_MIN_FREQUENCY,
  392. TOKEN_MAX_FREQUENCY,
  393. // SphereCollider
  394. TOKEN_SPHERE_COLLIDER_RADIUS,
  395. // TextureAnimator
  396. TOKEN_TEXANIM_TIME_STEP,
  397. TOKEN_TEXANIM_TEXCOORDS_START,
  398. TOKEN_TEXANIM_TEXCOORDS_END,
  399. TOKEN_START_TEXANIM_TEXCOORDS_RANGE,
  400. TOKEN_END_TEXANIM_TEXCOORDS_RANGE,
  401. TOKEN_TEXANIM_ANIMATION_TYPE,
  402. TOKEN_TEXANIM_START_RANDOM,
  403. TOKEN_TEXANIM_LOOP,
  404. TOKEN_TEXANIM_UP_DOWN,
  405. TOKEN_TEXANIM_RANDOM,
  406. // TextureRotator
  407. TOKEN_TEXROT_USE_OWN_ROTATION,
  408. TOKEN_TEXROT_ROTATION_SPEED,
  409. TOKEN_TEXROT_ROTATION,
  410. // VelocityMatchingAffector
  411. TOKEN_VELO_MATCHING_RADIUS,
  412. // VortexAffector
  413. TOKEN_VORTEX_ROTATION_VECTOR,
  414. TOKEN_VORTEX_ROTATION_SPEED,
  415. // OnCountObserver
  416. TOKEN_ONCOUNT_THRESHOLD,
  417. // OnEventFlagObserver
  418. TOKEN_ONEVENT_FLAG,
  419. // OnPositionObserver
  420. TOKEN_ONPOSITION_X,
  421. TOKEN_ONPOSITION_Y,
  422. TOKEN_ONPOSITION_Z,
  423. // OnRandomObserver
  424. TOKEN_ONRANDOM_THRESHOLD,
  425. // OnTimeObserver
  426. TOKEN_ONTIME,
  427. // OnVelocityObserver
  428. TOKEN_ONVELOCITY_THRESHOLD,
  429. // DoAffectorEventHandler
  430. TOKEN_FORCE_AFFECTOR,
  431. TOKEN_FORCE_AFFECTOR_PRE_POST,
  432. // DoEnableComponentEventHandler
  433. TOKEN_DOENABLE_COMPONENT,
  434. TOKEN_DOENABLE_EMITTER_COMPONENT,
  435. TOKEN_DOENABLE_AFFECTOR_COMPONENT,
  436. TOKEN_DOENABLE_TECHNIQUE_COMPONENT,
  437. TOKEN_DOENABLE_OBSERVER_COMPONENT,
  438. // DoPlacementParticleEventHandler
  439. TOKEN_DOPLACE_FORCE_EMITTER,
  440. TOKEN_DOPLACE_NUMBER_OF_PARTICLES,
  441. TOKEN_INHERIT_POSITION,
  442. TOKEN_INHERIT_DIRECTION,
  443. TOKEN_INHERIT_ORIENTATION,
  444. TOKEN_INHERIT_TIME_TO_LIVE,
  445. TOKEN_INHERIT_MASS,
  446. TOKEN_INHERIT_TEXTURE_COORDINATE,
  447. TOKEN_INHERIT_COLOUR,
  448. TOKEN_INHERIT_WIDTH,
  449. TOKEN_INHERIT_HEIGHT,
  450. TOKEN_INHERIT_DEPTH,
  451. // DoScaleEventHandler
  452. TOKEN_DOSCALE_FRACTION,
  453. TOKEN_DOSCALE_TYPE,
  454. TOKEN_DOSCALE_TIME_TO_LIVE,
  455. TOKEN_DOSCALE_VELOCITY,
  456. // SlaveBehaviour
  457. // PhysXActorExtern
  458. TOKEN_PHYSX_SHAPE_TYPE,
  459. TOKEN_PHYSX_ACTOR_COLLISION_GROUP,
  460. TOKEN_PHYSX_SHAPE_COLLISION_GROUP,
  461. TOKEN_PHYSX_GROUP_MASK,
  462. TOKEN_PHYSX_ANGULAR_VELOCITY,
  463. TOKEN_PHYSX_ANGULAR_DAMPING,
  464. TOKEN_PHYSX_MATERIAL_INDEX,
  465. TOKEN_SHAPE_TYPE,
  466. TOKEN_ACTOR_COLLISION_GROUP,
  467. TOKEN_SHAPE_COLLISION_GROUP,
  468. TOKEN_ANGULAR_VELOCITY,
  469. TOKEN_ANGULAR_DAMPING,
  470. TOKEN_MATERIAL_INDEX,
  471. TOKEN_PHYSX_BOX,
  472. TOKEN_PHYSX_SPHERE,
  473. TOKEN_PHYSX_CAPSULE,
  474. // PhysXFluidExtern
  475. TOKEN_REST_PARTICLE_PER_METER,
  476. TOKEN_REST_DENSITY,
  477. TOKEN_KERNEL_RADIUS_MULTIPLIER,
  478. TOKEN_MOTION_LIMIT_MULTIPLIER,
  479. TOKEN_COLLISION_DISTANCE_MULTIPLIER,
  480. TOKEN_PACKET_SIZE_MULTIPLIER,
  481. TOKEN_STIFFNESS,
  482. TOKEN_VISCOSITY,
  483. TOKEN_SURFACE_TENSION,
  484. TOKEN_DAMPING,
  485. TOKEN_EXTERNAL_ACCELERATION,
  486. TOKEN_RESTITUTION_FOR_STATIC_SHAPES,
  487. TOKEN_DYNAMIC_FRICTION_FOR_STATIC_SHAPES,
  488. TOKEN_STATIC_FRICTION_FOR_STATIC_SHAPES,
  489. TOKEN_ATTRACTION_FOR_STATIC_SHAPES,
  490. TOKEN_RESTITUTION_FOR_DYNAMIC_SHAPES,
  491. TOKEN_DYNAMIC_FRICTION_FOR_DYNAMIC_SHAPES,
  492. TOKEN_STATIC_FRICTION_FOR_DYNAMIC_SHAPES,
  493. TOKEN_ATTRACTION_FOR_DYNAMIC_SHAPES,
  494. TOKEN_COLLISION_RESPONSE_COEFFICIENT,
  495. TOKEN_COLLISION_GROUP,
  496. TOKEN_SIMULATION_METHOD,
  497. TOKEN_COLLISION_METHOD,
  498. TOKEN_FLAGS,
  499. TOKEN_FLAG_VISUALIZATION,
  500. TOKEN_FLAG_DISABLE_GRAVITY,
  501. TOKEN_FLAG_COLLISION_TWOWAY,
  502. TOKEN_FLAG_FLUID_ENABLED,
  503. TOKEN_FLAG_HARDWARE,
  504. TOKEN_FLAG_PRIORITY_MODE,
  505. TOKEN_FLAG_PROJECT_TO_PLANE,
  506. TOKEN_FLAG_STRICT_COOKING_FORMAT,
  507. TOKEN_INTERCOLLISION,
  508. TOKEN_NOINTERCOLLISION,
  509. TOKEN_MIX_INTERCOLLISION,
  510. TOKEN_STATIC,
  511. TOKEN_DYNAMIC,
  512. // SceneDecoratorExtern
  513. TOKEN_SCENE_MESH_NAME,
  514. TOKEN_SCENE_MATERIAL_NAME,
  515. TOKEN_SCENE_SCALE,
  516. TOKEN_SCENE_POSITION
  517. };
  518. // Static tokens: Note, that the order must be the same as the enum
  519. static const std::string token[1000] =
  520. {
  521. // Generic
  522. "group_mask",
  523. "acceleration",
  524. "max_increment",
  525. "min_increment",
  526. "number_of_iterations",
  527. "colour_change",
  528. "initial_colour",
  529. "random_initial_colour",
  530. "use_vertex_colours",
  531. "use_own_rotation",
  532. "max_deviation",
  533. "time_step",
  534. "box_width",
  535. "box_height",
  536. "box_depth",
  537. "velocity",
  538. "speed",
  539. "rotation_speed",
  540. "rotation",
  541. "rotation_axis",
  542. "normal",
  543. "step",
  544. "number_of_segments",
  545. "max_elements",
  546. "update_interval",
  547. "distance_threshold",
  548. "material",
  549. "mesh_name",
  550. "radius",
  551. "enabled",
  552. "position",
  553. "keep_local",
  554. "less_than",
  555. "greater_than",
  556. "equals",
  557. "visual_particle",
  558. "emitter_particle",
  559. "affector_particle",
  560. "technique_particle",
  561. "system_particle",
  562. "point",
  563. "vertex",
  564. "increase",
  565. "alias",
  566. "use_alias",
  567. "since_start_system",
  568. // Particle System
  569. "system",
  570. "iteration_interval",
  571. "nonvisible_update_timeout",
  572. "fixed_timeout",
  573. "lod_distances",
  574. "main_camera_name",
  575. "smooth_lod",
  576. "fast_forward",
  577. "scale",
  578. "scale_velocity",
  579. "scale_time",
  580. "tight_bounding_box",
  581. "category",
  582. // Particle Technique
  583. "technique",
  584. "visual_particle_quota",
  585. "emitted_emitter_quota",
  586. "emitted_affector_quota",
  587. "emitted_technique_quota",
  588. "emitted_system_quota",
  589. "lod_index",
  590. "default_particle_width",
  591. "default_particle_height",
  592. "default_particle_depth",
  593. "spatial_hashing_cell_dimension",
  594. "spatial_hashing_cell_overlap",
  595. "spatial_hashtable_size",
  596. "spatial_hashing_update_interval",
  597. "max_velocity",
  598. // Particle Renderer
  599. "renderer",
  600. "render_queue_group",
  601. "sorting",
  602. "texture_coords_define",
  603. "texture_coords_rows",
  604. "texture_coords_set",
  605. "texture_coords_columns",
  606. "use_soft_particles",
  607. "soft_particles_contrast_power",
  608. "soft_particles_scale",
  609. "soft_particles_delta",
  610. // Particle Emitter
  611. "emitter",
  612. "direction",
  613. "orientation",
  614. "range_start_orientation",
  615. "range_end_orientation",
  616. "start_orientation_range",
  617. "end_orientation_range",
  618. "duration",
  619. "repeat_delay",
  620. "emits",
  621. "angle",
  622. "emission_rate",
  623. "time_to_live",
  624. "mass",
  625. "start_texture_coords",
  626. "end_texture_coords",
  627. "start_texture_coords_range",
  628. "end_texture_coords_range",
  629. "texture_coords",
  630. "start_colour_range",
  631. "end_colour_range",
  632. "colour",
  633. "all_particle_dimensions",
  634. "particle_width",
  635. "particle_height",
  636. "particle_depth",
  637. "auto_direction",
  638. "force_emission",
  639. // Particle Affector
  640. "affector",
  641. "mass_affector",
  642. "exclude_emitter",
  643. "affect_specialisation",
  644. "special_default",
  645. "special_ttl_increase",
  646. "special_ttl_decrease",
  647. // Particle Observer
  648. "observer",
  649. "observe_particle_type",
  650. "observe_interval",
  651. "observe_until_event",
  652. // Particle Event Handler
  653. "handler",
  654. // Particle Behaviour
  655. "behaviour",
  656. // Extern
  657. "extern",
  658. "attachable_distance_threshold",
  659. // Dynamic Attribute
  660. "control_point",
  661. "min",
  662. "max",
  663. "oscillate_frequency",
  664. "oscillate_phase",
  665. "oscillate_base",
  666. "oscillate_amplitude",
  667. "oscillate_type",
  668. "dyn_oscillate",
  669. "dyn_random",
  670. "dyn_curved_linear",
  671. "dyn_curved_spline",
  672. "sine",
  673. "square",
  674. // CameraDependency (unused)
  675. "camera_dependency",
  676. // ------------------------- Renderers -------------------------
  677. // BeamRenderer
  678. "beam_update_interval",
  679. "beam_max_elements",
  680. "beam_deviation",
  681. "beam_number_segments",
  682. "beam_jump_segments",
  683. "beam_texcoord_direction",
  684. "beam_vertex_colours",
  685. "tcd_u",
  686. "tcd_v",
  687. // BillboardRenderer
  688. "billboard_type",
  689. "billboard_origin",
  690. "billboard_rotation_type",
  691. "common_direction",
  692. "common_up_vector",
  693. "point_rendering",
  694. "accurate_facing",
  695. "oriented_common",
  696. "oriented_self",
  697. "oriented_shape",
  698. "perpendicular_common",
  699. "perpendicular_self",
  700. "top_left",
  701. "top_center",
  702. "top_right",
  703. "center_left",
  704. "center_right",
  705. "center",
  706. "bottom_left",
  707. "bottom_center",
  708. "bottom_right",
  709. "texcoord",
  710. // BoxRenderer: No properties itself
  711. // EntityRenderer
  712. "entity_renderer_mesh_name",
  713. "entity_orientation_type",
  714. "ent_oriented_self",
  715. "ent_oriented_self_mirrored",
  716. "ent_oriented_shape",
  717. // LightRenderer
  718. "light_renderer_light_type",
  719. "light_renderer_queue_group",
  720. "light_renderer_specular",
  721. "light_renderer_att_range",
  722. "light_renderer_att_constant",
  723. "light_renderer_att_linear",
  724. "light_renderer_att_quadratic",
  725. "light_renderer_spot_inner",
  726. "light_renderer_spot_outer",
  727. "light_renderer_falloff",
  728. "light_renderer_powerscale",
  729. "spot",
  730. "flash_frequency",
  731. "flash_length",
  732. "flash_random",
  733. // RibbonTrailRenderer
  734. "ribbontrail_vertex_colours",
  735. "ribbontrail_max_elements",
  736. "ribbontrail_length",
  737. "ribbontrail_width",
  738. "ribbontrail_random_initial_colour",
  739. "ribbontrail_initial_colour",
  740. "ribbontrail_colour_change",
  741. // SphereRenderer: No properties itself
  742. // ------------------------- Emitters -------------------------
  743. // BoxEmitter
  744. "box_em_width",
  745. "box_em_height",
  746. "box_em_depth",
  747. // CircleEmitter
  748. "circle_em_radius",
  749. "circle_em_step",
  750. "circle_em_angle",
  751. "circle_em_random",
  752. "emit_random",
  753. "circle_em_normal",
  754. // LineEmitter
  755. "line_em_end",
  756. "line_em_max_increment",
  757. "line_em_min_increment",
  758. "line_em_max_deviation",
  759. // MeshSurfaceEmitter
  760. "mesh_surface_mesh_name",
  761. "mesh_surface_distribution",
  762. "mesh_surface_scale",
  763. "edge",
  764. "heterogeneous_1",
  765. "heterogeneous_2",
  766. "homogeneous",
  767. // PointEmitter: No properties itself
  768. // PositionEmitter
  769. "add_position",
  770. "random_position",
  771. // SlaveEmitter
  772. "master_technique_name",
  773. "master_emitter_name",
  774. // SphereSurfaceEmitter
  775. "sphere_surface_em_radius",
  776. // VertexEmitter
  777. "vertex_em_step",
  778. "vertex_em_segments",
  779. "vertex_em_iterations",
  780. "vertex_em_mesh_name",
  781. // ------------------------- Affectors -------------------------
  782. // AlignAffector
  783. "align_aff_resize",
  784. "resize",
  785. // BoxCollider
  786. "box_collider_width",
  787. "box_collider_height",
  788. "box_collider_depth",
  789. // BaseCollider
  790. "friction",
  791. "bouncyness",
  792. "intersection",
  793. "collision_friction",
  794. "collision_bouncyness",
  795. "collision_intersection",
  796. "collision_type",
  797. "bounce",
  798. "flow",
  799. "none",
  800. "point",
  801. "box",
  802. "inner_collision",
  803. // CollisionAvoidanceAffector
  804. "avoidance_radius",
  805. // ColourAffector
  806. "time_colour",
  807. "colour_aff_time_colour",
  808. "colour_operation",
  809. "multiply",
  810. "set",
  811. // FlockCenteringAffector: No properties itself
  812. // BaseForceAffector
  813. "force_vector",
  814. "force_application",
  815. "force_aff_vector",
  816. "force_aff_application",
  817. "add",
  818. "average",
  819. // ForceFieldAffector
  820. "forcefield_type",
  821. "realtime",
  822. "matrix",
  823. "delta",
  824. "force",
  825. "octaves",
  826. "frequency",
  827. "amplitude",
  828. "persistence",
  829. "forcefield_size",
  830. "worldsize",
  831. "ignore_negative_x",
  832. "ignore_negative_y",
  833. "ignore_negative_z",
  834. "movement",
  835. "movement_frequency",
  836. // GeometryRotator
  837. "geom_rot_use_own_rotation",
  838. "geom_rot_rotation_speed",
  839. "geom_rot_axis",
  840. // GravityAffector
  841. "gravity",
  842. // InterParticleCollider
  843. "adjustment",
  844. "collision_response",
  845. "ip_adjustment",
  846. "ip_collision_response",
  847. "average_velocity",
  848. "angle_based_velocity",
  849. // JetAffector
  850. "jet_aff_accel",
  851. // LineAffector
  852. "end",
  853. "drift",
  854. "line_aff_max_deviation",
  855. "line_aff_time_step",
  856. "line_aff_end",
  857. "line_aff_drift",
  858. // LinearForceAffector: No properties itself
  859. // ParticleFollower
  860. "follower_max_distance",
  861. "follower_min_distance",
  862. "max_distance",
  863. "min_distance",
  864. // PathFollower
  865. "path_follower_point",
  866. // PlaneCollider
  867. "plane_collider_normal",
  868. // Randomiser
  869. "rand_aff_max_deviation_x",
  870. "rand_aff_max_deviation_y",
  871. "rand_aff_max_deviation_z",
  872. "max_deviation_x",
  873. "max_deviation_y",
  874. "max_deviation_z",
  875. "rand_aff_time_step",
  876. "rand_aff_direction",
  877. "use_direction",
  878. // ScaleAffector
  879. "xyz_scale",
  880. "x_scale",
  881. "y_scale",
  882. "z_scale",
  883. // ScaleVelocityAffector
  884. "velocity_scale",
  885. "stop_at_flip",
  886. // SineForceAffector
  887. "sinef_aff_frequency_min",
  888. "sinef_aff_frequency_max",
  889. "min_frequency",
  890. "max_frequency",
  891. // SphereCollider
  892. "sphere_collider_radius",
  893. // TextureAnimator
  894. "time_step_animation",
  895. "texture_coords_start",
  896. "texture_coords_end",
  897. "start_texture_coords_range",
  898. "end_texture_coords_range",
  899. "texture_animation_type",
  900. "texture_start_random",
  901. "loop",
  902. "up_down",
  903. "random",
  904. // TextureRotator
  905. "tex_rot_use_own_rotation",
  906. "tex_rot_speed",
  907. "tex_rot_rotation",
  908. // VelocityMatchingAffector
  909. "velocity_matching_radius",
  910. // VortexAffector
  911. "vortex_aff_vector",
  912. "vortex_aff_speed",
  913. // ------------------------- Observers -------------------------
  914. // OnClearObserver: No properties itself
  915. // OnCollisionObserver: No properties itself
  916. // OnCountObserver
  917. "count_threshold",
  918. // OnEmissionObserver: No properties itself
  919. // OnEventFlagObserver
  920. "event_flag",
  921. // OnExpireObserver: No properties itself
  922. // OnPositionObserver
  923. "position_x",
  924. "position_y",
  925. "position_z",
  926. // OnQuotaObserver: No properties itself
  927. // OnRandomObserver
  928. "random_threshold",
  929. // OnTimeObserver
  930. "on_time",
  931. // OnVelocityObserver
  932. "velocity_threshold",
  933. // ------------------------- Event Handlers -------------------------
  934. // DoAffectorEventHandler
  935. "force_affector",
  936. "pre_post",
  937. // DoEnableComponentEventHandler
  938. "enable_component",
  939. "emitter_component",
  940. "affector_component",
  941. "technique_component",
  942. "observer_component",
  943. // DoExpireEventHandler: No properties itself
  944. // DoFreezeEventHandler: No properties itself
  945. // DoPlacementParticleEventHandler
  946. "force_emitter",
  947. "number_of_particles",
  948. "inherit_position",
  949. "inherit_direction",
  950. "inherit_orientation",
  951. "inherit_time_to_live",
  952. "inherit_mass",
  953. "inherit_texture_coord",
  954. "inherit_colour",
  955. "inherit_width",
  956. "inherit_height",
  957. "inherit_depth",
  958. // DoScaleEventHandler
  959. "scale_fraction",
  960. "scale_type",
  961. "st_time_to_live",
  962. "st_velocity",
  963. // DoStopSystemEventHandler: No properties itself
  964. // ------------------------- Behaviours -------------------------
  965. // SlaveBehaviour: No properties itself
  966. // ------------------------- Externs -------------------------
  967. // BoxColliderExtern: Defined in BoxCollider
  968. // GravityExtern: Defined in GravityAffector
  969. // PhysXActorExtern
  970. "physx_shape",
  971. "physx_actor_group",
  972. "physx_shape_group",
  973. "physx_group_mask",
  974. "physx_angular_velocity",
  975. "physx_angular_damping",
  976. "physx_material_index",
  977. "shape",
  978. "actor_group",
  979. "shape_group",
  980. "angular_velocity",
  981. "angular_damping",
  982. "material_index",
  983. "Box",
  984. "Sphere",
  985. "Capsule",
  986. // PhysXFluidExtern
  987. "rest_particles_per_meter",
  988. "rest_density",
  989. "kernel_radius_multiplier",
  990. "motion_limit_multiplier",
  991. "collision_distance_multiplier",
  992. "packet_size_multiplier",
  993. "stiffness",
  994. "viscosity",
  995. "surface_tension",
  996. "damping",
  997. "external_acceleration",
  998. "restitution_for_static_shapes",
  999. "dynamic_friction_for_static_shapes",
  1000. "static_friction_for_static_shapes",
  1001. "attraction_for_static_shapes",
  1002. "restitution_for_dynamic_shapes",
  1003. "dynamic_friction_for_dynamic_shapes",
  1004. "static_friction_for_dynamic_shapes",
  1005. "attraction_for_dynamic_shapes",
  1006. "collision_response_coefficient",
  1007. "collision_group",
  1008. "simulation_method",
  1009. "collision_method",
  1010. "flags",
  1011. "visualization",
  1012. "disable_gravity",
  1013. "collision_twoway",
  1014. "fluid_enabled",
  1015. "hardware",
  1016. "priority_mode",
  1017. "project_to_plane",
  1018. "strict_cooking_format",
  1019. "intercollision",
  1020. "no_intercollision",
  1021. "mix_intercollision",
  1022. "static",
  1023. "dynamic",
  1024. // SceneDecoratorExtern
  1025. "scene_mesh_name",
  1026. "scene_material_name",
  1027. "scene_node_scale",
  1028. "scene_node_position",
  1029. // SphereColliderExtern: Defined in SphereCollider
  1030. // VortexExtern: Defined in VortexAffector
  1031. };
  1032. /**script translator*/
  1033. class PUScriptTranslator
  1034. {
  1035. public:
  1036. PUScriptTranslator();
  1037. virtual ~PUScriptTranslator();
  1038. public:
  1039. static bool getFloat(const PUAbstractNode &node, float *result);
  1040. static bool getInt(const PUAbstractNode &node, int *result);
  1041. static bool getUInt(const PUAbstractNode &node, unsigned int *result);
  1042. static bool getBoolean(const PUAbstractNode &node, bool *result);
  1043. static bool getString(const PUAbstractNode &node, std::string *result);
  1044. //protected:
  1045. // virtual void translate(PUScriptCompiler *compiler, const PUConcreteNode &node) = 0;
  1046. public:
  1047. // Define validation types
  1048. enum ValidationType
  1049. {
  1050. VAL_REAL,
  1051. VAL_BOOL,
  1052. VAL_UINT,
  1053. VAL_INT,
  1054. VAL_STRING,
  1055. VAL_VECTOR2,
  1056. VAL_VECTOR3,
  1057. VAL_VECTOR4,
  1058. VAL_COLOURVALUE,
  1059. VAL_QUATERNION
  1060. };
  1061. /** @See ScriptTranslator
  1062. */
  1063. virtual void translate(PUScriptCompiler* /*compiler*/, PUAbstractNode* /*node*/)
  1064. {
  1065. // No own implementation
  1066. }
  1067. /** Only parses a certain child property
  1068. */
  1069. virtual bool translateChildProperty(PUScriptCompiler* /*compiler*/, PUAbstractNode* /*node*/)
  1070. {
  1071. // No own implementation
  1072. return false;
  1073. }
  1074. /** Only parses a certain child objec
  1075. */
  1076. virtual bool translateChildObject(PUScriptCompiler* /*compiler*/, PUAbstractNode* /*node*/)
  1077. {
  1078. // No own implementation
  1079. return false;
  1080. }
  1081. /** Parse Vector2
  1082. */
  1083. bool getVector2(PUAbstractNodeList::const_iterator i,
  1084. PUAbstractNodeList::const_iterator end,
  1085. Vec2* result,
  1086. int maxEntries = 2);
  1087. /** Parse Vector3
  1088. */
  1089. bool getVector3(PUAbstractNodeList::const_iterator i,
  1090. PUAbstractNodeList::const_iterator end,
  1091. Vec3* result,
  1092. int maxEntries = 3);
  1093. /** Parse Vector4
  1094. */
  1095. bool getVector4(PUAbstractNodeList::const_iterator i,
  1096. PUAbstractNodeList::const_iterator end,
  1097. Vec4* result,
  1098. int maxEntries = 4);
  1099. /** Parse Quaternion
  1100. */
  1101. bool getQuaternion(PUAbstractNodeList::const_iterator i,
  1102. PUAbstractNodeList::const_iterator end,
  1103. Quaternion* result,
  1104. int maxEntries = 4);
  1105. /** Validate a property.
  1106. */
  1107. bool passValidateProperty(PUScriptCompiler* compiler,
  1108. PUPropertyAbstractNode* prop,
  1109. const std::string& token,
  1110. ValidationType validationType);
  1111. /** Validate whether a property has values.
  1112. */
  1113. bool passValidatePropertyNoValues(PUScriptCompiler* compiler,
  1114. PUPropertyAbstractNode* prop,
  1115. const std::string& token);
  1116. /** Validate whether the number of values is correct.
  1117. */
  1118. bool passValidatePropertyNumberOfValues(PUScriptCompiler* compiler,
  1119. PUPropertyAbstractNode* prop,
  1120. const std::string& token,
  1121. unsigned short numberOfValues);
  1122. /** Validate whether the number of values is between a range.
  1123. */
  1124. bool passValidatePropertyNumberOfValuesRange(PUScriptCompiler* compiler,
  1125. PUPropertyAbstractNode* prop,
  1126. const std::string& token,
  1127. unsigned short minNumberOfValues,
  1128. unsigned short maxNumberOfValues);
  1129. /** Validate whether the value is a correct Real.
  1130. */
  1131. bool passValidatePropertyValidReal(PUScriptCompiler* compiler, PUPropertyAbstractNode* prop);
  1132. /** Validate whether the value is a correct int.
  1133. */
  1134. bool passValidatePropertyValidInt(PUScriptCompiler* compiler, PUPropertyAbstractNode* prop);
  1135. /** Validate whether the value is a correct uint.
  1136. */
  1137. bool passValidatePropertyValidUint(PUScriptCompiler* compiler, PUPropertyAbstractNode* prop);
  1138. /** Validate whether the value is a correct bool.
  1139. */
  1140. bool passValidatePropertyValidBool(PUScriptCompiler* compiler, PUPropertyAbstractNode* prop);
  1141. /** Validate whether the value is a correct Vector2.
  1142. */
  1143. bool passValidatePropertyValidVector2(PUScriptCompiler* compiler, PUPropertyAbstractNode* prop);
  1144. /** Validate whether the value is a correct Vector3.
  1145. */
  1146. bool passValidatePropertyValidVector3(PUScriptCompiler* compiler, PUPropertyAbstractNode* prop);
  1147. /** Validate whether the value is a correct Vector4.
  1148. */
  1149. bool passValidatePropertyValidVector4(PUScriptCompiler* compiler, PUPropertyAbstractNode* prop);
  1150. /** Validate whether the value is a correct Quaternion.
  1151. */
  1152. bool passValidatePropertyValidQuaternion(PUScriptCompiler* compiler, PUPropertyAbstractNode* prop);
  1153. /** Adds an error to the compiler: An unknown token is read.
  1154. */
  1155. void errorUnexpectedToken(PUScriptCompiler* compiler, PUAbstractNode* node);
  1156. /** Adds an error to the compiler: An unknown property is read.
  1157. */
  1158. void errorUnexpectedProperty(PUScriptCompiler* compiler, PUPropertyAbstractNode* prop);
  1159. void processNode(PUScriptCompiler *compiler, PUAbstractNode *node);
  1160. virtual bool isParticleSystemTranslator() const { return false; }
  1161. };
  1162. NS_CC_END
  1163. #endif /* defined(__ssaafsdf__CCScriptTranslator__) */