You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

670 lines
17 KiB

  1. //
  2. // MY CLASS TYPE
  3. //
  4. // Copyright © 2009-2015 Benjamin "Touky" Huet <huet.benjamin@gmail.com>
  5. //
  6. // This program is free software. It comes without any warranty, to
  7. // the extent permitted by applicable law. You can redistribute it
  8. // and/or modify it under the terms of the Do What the Fuck You Want
  9. // to Public License, Version 2, as published by the WTFPL Task Force.
  10. // See http://www.wtfpl.net/ for more details.
  11. //
  12. #pragma once
  13. namespace lol
  14. {
  15. //-----------------------------------------------------------------------------
  16. class EasyMeshLuaLoader : public LuaLoader
  17. {
  18. public:
  19. EasyMeshLuaLoader();
  20. virtual ~EasyMeshLuaLoader();
  21. };
  22. //-----------------------------------------------------------------------------
  23. class EasyMeshLuaObject : public LuaObjectDef
  24. {
  25. typedef Lolua::VarPtr<EasyMeshLuaObject> EzMeshPtr;
  26. EasyMesh m_instance;
  27. public:
  28. //-------------------------------------------------------------------------
  29. EasyMeshLuaObject();
  30. virtual ~EasyMeshLuaObject();
  31. //-------------------------------------------------------------------------
  32. static EasyMeshLuaObject* New(LuaState* l, int arg_nb);
  33. static const LuaObjectLib* GetLib();
  34. //-------------------------------------------------------------------------
  35. static int AppendCylinder(LuaState* l)
  36. {
  37. LuaStack s(l);
  38. EzMeshPtr m;
  39. LuaInt32 nsides;
  40. LuaFloat h, d1, d2;
  41. LuaBool dualside(false, true), smooth(false, true), close(false, true);
  42. s >> m >> nsides >> h >> d1 >> d2 >> dualside >> smooth >> close;
  43. m->m_instance.AppendCylinder(nsides, h, d1, d2, dualside, smooth, close);
  44. return 0;
  45. }
  46. static int AppendSphere(LuaState* l)
  47. {
  48. LuaStack s(l);
  49. EzMeshPtr m;
  50. LuaInt32 ndivisions;
  51. LuaFloat d;
  52. s >> m >> ndivisions >> d;
  53. m->m_instance.AppendSphere(ndivisions, d);
  54. return 0;
  55. }
  56. static int AppendCapsule(LuaState* l)
  57. {
  58. LuaStack s(l);
  59. EzMeshPtr m;
  60. LuaInt32 ndivisions;
  61. LuaFloat h, d;
  62. s >> m >> ndivisions >> h >> d;
  63. m->m_instance.AppendCapsule(ndivisions, h, d);
  64. return 0;
  65. }
  66. static int AppendTorus(LuaState* l)
  67. {
  68. LuaStack s(l);
  69. EzMeshPtr m;
  70. LuaInt32 ndivisions;
  71. LuaFloat d1, d2;
  72. s >> m >> ndivisions >> d1 >> d2;
  73. m->m_instance.AppendTorus(ndivisions, d1, d2);
  74. return 0;
  75. }
  76. static int AppendBox(LuaState* l)
  77. {
  78. LuaStack s(l);
  79. EzMeshPtr m;
  80. LuaVec3 size;
  81. LuaFloat chamf(0.f, true);
  82. LuaBool smooth(false, true);
  83. s >> m >> size >> chamf >> smooth;
  84. m->m_instance.AppendBox(size, chamf, smooth);
  85. return 0;
  86. }
  87. static int AppendStar(LuaState* l)
  88. {
  89. LuaStack s(l);
  90. EzMeshPtr m;
  91. LuaInt32 nbranches;
  92. LuaFloat d1, d2;
  93. LuaBool fade(false, true), fade2(false, true);
  94. s >> m >> nbranches >> d1 >> d2 >> fade >> fade2;
  95. m->m_instance.AppendStar(nbranches, d1, d2, fade, fade2);
  96. return 0;
  97. }
  98. static int AppendExpandedStar(LuaState* l)
  99. {
  100. LuaStack s(l);
  101. EzMeshPtr m;
  102. LuaInt32 nbranches;
  103. LuaFloat d1, d2, extrad(0.f, true);
  104. s >> m >> nbranches >> d1 >> d2 >> extrad;
  105. m->m_instance.AppendExpandedStar(nbranches, d1, d2, extrad);
  106. return 0;
  107. }
  108. static int AppendDisc(LuaState* l)
  109. {
  110. LuaStack s(l);
  111. EzMeshPtr m;
  112. LuaInt32 nsides;
  113. LuaFloat d;
  114. LuaBool fade(false, true);
  115. s >> m >> nsides >> d >> fade;
  116. m->m_instance.AppendDisc(nsides, d, fade);
  117. return 0;
  118. }
  119. static int AppendSimpleTriangle(LuaState* l)
  120. {
  121. LuaStack s(l);
  122. EzMeshPtr m;
  123. LuaFloat d;
  124. LuaBool fade(false, true);
  125. s >> m >> d >> fade;
  126. m->m_instance.AppendSimpleTriangle(d, fade);
  127. return 0;
  128. }
  129. static int AppendSimpleQuad(LuaState* l)
  130. {
  131. LuaStack s(l);
  132. EzMeshPtr m;
  133. LuaFloat size;
  134. LuaBool fade(false, true);
  135. s >> m >> size >> fade;
  136. m->m_instance.AppendSimpleQuad(size, fade);
  137. return 0;
  138. }
  139. static int AppendCog(LuaState* l)
  140. {
  141. LuaStack s(l);
  142. EzMeshPtr m;
  143. LuaInt32 nbsides;
  144. LuaFloat h, sidemul(0.f, true);
  145. LuaVec2 d0, d1, d2;
  146. LuaBool offset(false, true);
  147. s >> m >> nbsides >> h >> d0 >> d1 >> d2 >> sidemul >> offset;
  148. m->m_instance.AppendCog(nbsides, h, d0().x, d0().y, d1().x, d1().y, d2().x, d2().y, sidemul, offset);
  149. return 0;
  150. }
  151. //-------------------------------------------------------------------------
  152. static int TranslateX(LuaState* l)
  153. {
  154. LuaStack s(l);
  155. EzMeshPtr m;
  156. LuaFloat f;
  157. s >> m >> f;
  158. m->m_instance.TranslateX(f);
  159. return 0;
  160. }
  161. static int TranslateY(LuaState* l)
  162. {
  163. LuaStack s(l);
  164. EzMeshPtr m;
  165. LuaFloat f;
  166. s >> m >> f;
  167. m->m_instance.TranslateY(f);
  168. return 0;
  169. }
  170. static int TranslateZ(LuaState* l)
  171. {
  172. LuaStack s(l);
  173. EzMeshPtr m;
  174. LuaFloat f;
  175. s >> m >> f;
  176. m->m_instance.TranslateZ(f);
  177. return 0;
  178. }
  179. static int Translate(LuaState* l)
  180. {
  181. LuaStack s(l);
  182. EzMeshPtr m;
  183. LuaVec3 v;
  184. s >> m >> v;
  185. m->m_instance.Translate(v);
  186. return 0;
  187. }
  188. //-------------------------------------------------------------------------
  189. static int RotateX(LuaState* l)
  190. {
  191. LuaStack s(l);
  192. EzMeshPtr m;
  193. LuaFloat a;
  194. s >> m >> a;
  195. m->m_instance.RotateX(a);
  196. return 0;
  197. }
  198. static int RotateY(LuaState* l)
  199. {
  200. LuaStack s(l);
  201. EzMeshPtr m;
  202. LuaFloat a;
  203. s >> m >> a;
  204. m->m_instance.RotateY(a);
  205. return 0;
  206. }
  207. static int RotateZ(LuaState* l)
  208. {
  209. LuaStack s(l);
  210. EzMeshPtr m;
  211. LuaFloat a;
  212. s >> m >> a;
  213. m->m_instance.RotateZ(a);
  214. return 0;
  215. }
  216. static int Rotate(LuaState* l)
  217. {
  218. LuaStack s(l);
  219. EzMeshPtr m;
  220. LuaFloat a;
  221. LuaVec3 v;
  222. s >> m >> a >> v;
  223. m->m_instance.Rotate(a, v);
  224. return 0;
  225. }
  226. //-------------------------------------------------------------------------
  227. static int ScaleX(LuaState* l)
  228. {
  229. LuaStack s(l);
  230. EzMeshPtr m;
  231. LuaFloat x;
  232. s >> m >> x;
  233. m->m_instance.ScaleX(x);
  234. return 0;
  235. }
  236. static int ScaleY(LuaState* l)
  237. {
  238. LuaStack s(l);
  239. EzMeshPtr m;
  240. LuaFloat y;
  241. s >> m >> y;
  242. m->m_instance.ScaleY(y);
  243. return 0;
  244. }
  245. static int ScaleZ(LuaState* l)
  246. {
  247. LuaStack s(l);
  248. EzMeshPtr m;
  249. LuaFloat z;
  250. s >> m >> z;
  251. m->m_instance.ScaleZ(z);
  252. return 0;
  253. }
  254. static int Scale(LuaState* l)
  255. {
  256. LuaStack s(l);
  257. EzMeshPtr m;
  258. LuaVec3 v;
  259. s >> m >> v;
  260. m->m_instance.Scale(v);
  261. return 0;
  262. }
  263. //-------------------------------------------------------------------------
  264. static int RadialJitter(LuaState* l)
  265. {
  266. LuaStack s(l);
  267. EzMeshPtr m;
  268. LuaFloat f;
  269. s >> m >> f;
  270. m->m_instance.RadialJitter(f);
  271. return 0;
  272. }
  273. //-------------------------------------------------------------------------
  274. static int TaperX(LuaState* l)
  275. {
  276. LuaStack s(l);
  277. EzMeshPtr m;
  278. LuaFloat y, z, xoff(0.f, true);
  279. LuaBool abs(true, true);
  280. s >> m >> y >> z >> xoff >> abs;
  281. m->m_instance.TaperX(y, z, xoff, abs);
  282. return 0;
  283. }
  284. static int TaperY(LuaState* l)
  285. {
  286. LuaStack s(l);
  287. EzMeshPtr m;
  288. LuaFloat x, z, yoff(0.f, true);
  289. LuaBool abs(true, true);
  290. s >> m >> x >> z >> yoff >> abs;
  291. m->m_instance.TaperY(x, z, yoff, abs);
  292. return 0;
  293. }
  294. static int TaperZ(LuaState* l)
  295. {
  296. LuaStack s(l);
  297. EzMeshPtr m;
  298. LuaFloat x, y, zoff(0.f, true);
  299. LuaBool abs(true, true);
  300. s >> m >> x >> y >> zoff >> abs;
  301. m->m_instance.TaperZ(x, y, zoff, abs);
  302. return 0;
  303. }
  304. //-------------------------------------------------------------------------
  305. static int TwistX(LuaState* l)
  306. {
  307. LuaStack s(l);
  308. EzMeshPtr m;
  309. LuaFloat t, toff(0.f, true);
  310. s >> m >> t >> toff;
  311. m->m_instance.TwistX(t, toff);
  312. return 0;
  313. }
  314. static int TwistY(LuaState* l)
  315. {
  316. LuaStack s(l);
  317. EzMeshPtr m;
  318. LuaFloat t, toff(0.f, true);
  319. s >> m >> t >> toff;
  320. m->m_instance.TwistY(t, toff);
  321. return 0;
  322. }
  323. static int TwistZ(LuaState* l)
  324. {
  325. LuaStack s(l);
  326. EzMeshPtr m;
  327. LuaFloat t, toff(0.f, true);
  328. s >> m >> t >> toff;
  329. m->m_instance.TwistZ(t, toff);
  330. return 0;
  331. }
  332. //-------------------------------------------------------------------------
  333. static int ShearX(LuaState* l)
  334. {
  335. LuaStack s(l);
  336. EzMeshPtr m;
  337. LuaFloat y, z, xoff(0.f, true);
  338. LuaBool abs(true, true);
  339. s >> m >> y >> z >> xoff >> abs;
  340. m->m_instance.ShearX(y, z, xoff, abs);
  341. return 0;
  342. }
  343. static int ShearY(LuaState* l)
  344. {
  345. LuaStack s(l);
  346. EzMeshPtr m;
  347. LuaFloat x, z, yoff(0.f, true);
  348. LuaBool abs(true, true);
  349. s >> m >> x >> z >> yoff >> abs;
  350. m->m_instance.ShearY(x, z, yoff, abs);
  351. return 0;
  352. }
  353. static int ShearZ(LuaState* l)
  354. {
  355. LuaStack s(l);
  356. EzMeshPtr m;
  357. LuaFloat x, y, zoff(0.f, true);
  358. LuaBool abs(true, true);
  359. s >> m >> x >> y >> zoff >> abs;
  360. m->m_instance.ShearZ(x, y, zoff, abs);
  361. return 0;
  362. }
  363. //-------------------------------------------------------------------------
  364. static int StretchX(LuaState* l)
  365. {
  366. LuaStack s(l);
  367. EzMeshPtr m;
  368. LuaFloat y, z, xoff(0.f, true);
  369. s >> m >> y >> z >> xoff;
  370. m->m_instance.StretchX(y, z, xoff);
  371. return 0;
  372. }
  373. static int StretchY(LuaState* l)
  374. {
  375. LuaStack s(l);
  376. EzMeshPtr m;
  377. LuaFloat x, z, yoff(0.f, true);
  378. s >> m >> x >> z >> yoff;
  379. m->m_instance.StretchY(x, z, yoff);
  380. return 0;
  381. }
  382. static int StretchZ(LuaState* l)
  383. {
  384. LuaStack s(l);
  385. EzMeshPtr m;
  386. LuaFloat x, y, zoff(0.f, true);
  387. s >> m >> x >> y >> zoff;
  388. m->m_instance.StretchZ(x, y, zoff);
  389. return 0;
  390. }
  391. //-------------------------------------------------------------------------
  392. static int BendXY(LuaState* l)
  393. {
  394. LuaStack s(l);
  395. EzMeshPtr m;
  396. LuaFloat t, toff(0.f, true);
  397. s >> m >> t >> toff;
  398. m->m_instance.BendXY(t, toff);
  399. return 0;
  400. }
  401. static int BendXZ(LuaState* l)
  402. {
  403. LuaStack s(l);
  404. EzMeshPtr m;
  405. LuaFloat t, toff(0.f, true);
  406. s >> m >> t >> toff;
  407. m->m_instance.BendXZ(t, toff);
  408. return 0;
  409. }
  410. static int BendYX(LuaState* l)
  411. {
  412. LuaStack s(l);
  413. EzMeshPtr m;
  414. LuaFloat t, toff(0.f, true);
  415. s >> m >> t >> toff;
  416. m->m_instance.BendYX(t, toff);
  417. return 0;
  418. }
  419. static int BendYZ(LuaState* l)
  420. {
  421. LuaStack s(l);
  422. EzMeshPtr m;
  423. LuaFloat t, toff(0.f, true);
  424. s >> m >> t >> toff;
  425. m->m_instance.BendYZ(t, toff);
  426. return 0;
  427. }
  428. static int BendZX(LuaState* l)
  429. {
  430. LuaStack s(l);
  431. EzMeshPtr m;
  432. LuaFloat t, toff(0.f, true);
  433. s >> m >> t >> toff;
  434. m->m_instance.BendZX(t, toff);
  435. return 0;
  436. }
  437. static int BendZY(LuaState* l)
  438. {
  439. LuaStack s(l);
  440. EzMeshPtr m;
  441. LuaFloat t, toff(0.f, true);
  442. s >> m >> t >> toff;
  443. m->m_instance.BendZY(t, toff);
  444. return 0;
  445. }
  446. //-------------------------------------------------------------------------
  447. static int MirrorX(LuaState* l)
  448. {
  449. LuaStack s(l);
  450. EzMeshPtr m;
  451. s >> m;
  452. m->m_instance.MirrorX();
  453. return 0;
  454. }
  455. static int MirrorY(LuaState* l)
  456. {
  457. LuaStack s(l);
  458. EzMeshPtr m;
  459. s >> m;
  460. m->m_instance.MirrorY();
  461. return 0;
  462. }
  463. static int MirrorZ(LuaState* l)
  464. {
  465. LuaStack s(l);
  466. EzMeshPtr m;
  467. s >> m;
  468. m->m_instance.MirrorZ();
  469. return 0;
  470. }
  471. //-------------------------------------------------------------------------
  472. static int LoopStart(LuaState* l)
  473. {
  474. LuaStack s(l);
  475. EzMeshPtr m;
  476. LuaInt32 loopnb;
  477. s >> m >> loopnb;
  478. m->m_instance.LoopStart(loopnb);
  479. return 0;
  480. }
  481. static int LoopEnd(LuaState* l)
  482. {
  483. LuaStack s(l);
  484. EzMeshPtr m;
  485. s >> m;
  486. m->m_instance.LoopEnd();
  487. return 0;
  488. }
  489. static int OpenBrace(LuaState* l)
  490. {
  491. LuaStack s(l);
  492. EzMeshPtr m;
  493. s >> m;
  494. m->m_instance.OpenBrace();
  495. return 0;
  496. }
  497. static int CloseBrace(LuaState* l)
  498. {
  499. LuaStack s(l);
  500. EzMeshPtr m;
  501. s >> m;
  502. m->m_instance.CloseBrace();
  503. return 0;
  504. }
  505. //-------------------------------------------------------------------------
  506. static int ToggleScaleWinding(LuaState* l)
  507. {
  508. LuaStack s(l);
  509. EzMeshPtr m;
  510. s >> m;
  511. m->m_instance.ToggleScaleWinding();
  512. return 0;
  513. }
  514. static int ToggleQuadWeighting(LuaState* l)
  515. {
  516. LuaStack s(l);
  517. EzMeshPtr m;
  518. s >> m;
  519. m->m_instance.ToggleQuadWeighting();
  520. return 0;
  521. }
  522. static int TogglePostBuildNormal(LuaState* l)
  523. {
  524. LuaStack s(l);
  525. EzMeshPtr m;
  526. s >> m;
  527. m->m_instance.TogglePostBuildNormal();
  528. return 0;
  529. }
  530. static int ToggleVerticeNoCleanup(LuaState* l)
  531. {
  532. LuaStack s(l);
  533. EzMeshPtr m;
  534. s >> m;
  535. m->m_instance.ToggleVerticeNoCleanup();
  536. return 0;
  537. }
  538. //-------------------------------------------------------------------------
  539. static int VerticesMerge(LuaState* l)
  540. {
  541. LuaStack s(l);
  542. EzMeshPtr m;
  543. s >> m;
  544. m->m_instance.VerticesMerge();
  545. return 0;
  546. }
  547. static int VerticesSeparate(LuaState* l)
  548. {
  549. LuaStack s(l);
  550. EzMeshPtr m;
  551. s >> m;
  552. m->m_instance.VerticesSeparate();
  553. return 0;
  554. }
  555. //-------------------------------------------------------------------------
  556. static int Duplicate(LuaState* l)
  557. {
  558. LuaStack s(l);
  559. EzMeshPtr m;
  560. LuaVec3 ds(vec3(1.f));
  561. s >> m >> ds;
  562. m->m_instance.DupAndScale(ds, true);
  563. return 0;
  564. }
  565. static int Smooth(LuaState* l)
  566. {
  567. LuaStack s(l);
  568. EzMeshPtr m;
  569. LuaInt32 pass, split_per_pass, smooth_per_pass;
  570. s >> m >> pass >> split_per_pass >> smooth_per_pass;
  571. m->m_instance.SmoothMesh(pass, split_per_pass, smooth_per_pass);
  572. return 0;
  573. }
  574. static int SplitTriangles(LuaState* l)
  575. {
  576. LuaStack s(l);
  577. EzMeshPtr m;
  578. LuaInt32 pass;
  579. s >> m >> pass;
  580. m->m_instance.SplitTriangles(pass);
  581. return 0;
  582. }
  583. static int Chamfer(LuaState* l)
  584. {
  585. LuaStack s(l);
  586. EzMeshPtr m;
  587. LuaFloat f;
  588. s >> m >> f;
  589. m->m_instance.Chamfer(f);
  590. return 0;
  591. }
  592. //-------------------------------------------------------------------------
  593. static int SetCurColor(LuaState* l)
  594. {
  595. LuaStack s(l);
  596. EzMeshPtr m;
  597. s >> m;
  598. LuaVec4 c;
  599. if (s.GetArgs() == 1 && !c.IsValid(l, 2))
  600. {
  601. LuaString str;
  602. s >> str;
  603. c = Color::C8BppHexString(str);
  604. }
  605. m->m_instance.SetCurColor(c);
  606. return 0;
  607. }
  608. static int SetCurColorA(LuaState* l)
  609. {
  610. LuaStack s(l);
  611. EzMeshPtr m;
  612. s >> m;
  613. LuaVec4 c;
  614. if (s.GetArgs() == 1 && !c.IsValid(l, 2))
  615. {
  616. LuaString str;
  617. s >> str;
  618. c = Color::C8BppHexString(str);
  619. }
  620. m->m_instance.SetCurColorA(c);
  621. return 0;
  622. }
  623. static int SetCurColorB(LuaState* l)
  624. {
  625. LuaStack s(l);
  626. EzMeshPtr m;
  627. s >> m;
  628. LuaVec4 c;
  629. if (s.GetArgs() == 1 && !c.IsValid(l, 2))
  630. {
  631. LuaString str;
  632. s >> str;
  633. c = Color::C8BppHexString(str);
  634. }
  635. m->m_instance.SetCurColorB(c);
  636. return 0;
  637. }
  638. static int SetVertColor(LuaState* l)
  639. {
  640. LuaStack s(l);
  641. EzMeshPtr m;
  642. s >> m;
  643. LuaVec4 c;
  644. if (s.GetArgs() == 1 && !c.IsValid(l, 2))
  645. {
  646. LuaString str;
  647. s >> str;
  648. c = Color::C8BppHexString(str);
  649. }
  650. m->m_instance.SetVertColor(c);
  651. return 0;
  652. }
  653. /*
  654. (csgu|csgunion) { return token::T_CSGUNION; }
  655. (csgs|CsgSub) { return token::T_CSGSUBSTRACT; }
  656. (csgsl|CsgSubL) { return token::T_CSGSUBSTRACTLOSS; }
  657. (csga|csgand) { return token::T_CSGAND; }
  658. (csgx|csgxor) { return token::T_CSGXOR; }
  659. */
  660. };
  661. } /* namespace lol */