Main.cpp 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. #include <iostream>
  2. #include <Fenster.h>
  3. #include <Bildschirm.h>
  4. #include <RenderThread.h>
  5. #include <KSGScript.h>
  6. #include <MausEreignis.h>
  7. #include <TastaturEreignis.h>
  8. #include <Schrift.h>
  9. #include <DateiSystem.h>
  10. #include <time.h>
  11. #include <Textfeld.h>
  12. #include <Datei.h>
  13. #include <M2Datei.h>
  14. #include <Model2D.h>
  15. #include <Bild.h>
  16. #include <Textur2D.h>
  17. namespace Framework
  18. {
  19. void initFramework();
  20. void releaseFramework();
  21. }
  22. using namespace Framework;
  23. using namespace KSGScript;
  24. class Obj : public Zeichnung
  25. {
  26. private:
  27. Model2D mdl;
  28. Model2D mdlA;
  29. Model2D mdlB;
  30. Punkt maus;
  31. Punkt mausAlt;
  32. Vertex hp;
  33. Vertex speed;
  34. Textur2D txt;
  35. float rot;
  36. public:
  37. Obj()
  38. {
  39. M2Datei d;
  40. d.setPfad( "ship.m2" );
  41. d.leseDaten();
  42. Model2DData *m = d.ladeModel( "ship" );
  43. mdl.setModel( m );
  44. mdl.setStyle( Model2D::Style::Mesh | Model2D::Style::Textur | Model2D::Style::Sichtbar );
  45. mdl.setFarbe( 0xFFFFFFFF );
  46. mdl.setPosition( 150, 150 );
  47. mdlA.setStyle( Model2D::Style::Mesh | Model2D::Style::Textur );
  48. mdlA.setFarbe( 0xFFFFFFFF );
  49. mdlA.setPosition( 50, 50 );
  50. mdlB.setStyle( Model2D::Style::Mesh | Model2D::Style::Textur );
  51. mdlB.setFarbe( 0xFFFFFFFF );
  52. mdlB.setPosition( 250, 50 );
  53. hp = Vertex( 0, 0 );
  54. mausAlt = Punkt( 0, 0 );
  55. maus = Punkt( 0, 0 );
  56. LTDBDatei td;
  57. td.setDatei( new Text( "ship.ltdb" ) );
  58. td.leseDaten( 0 );
  59. Bild *b = td.laden( 0, new Text( "a.png" ) );
  60. txt.setTexturZ( b );
  61. mdl.setTextur( txt.getThis(), "ship" );
  62. }
  63. ~Obj()
  64. {}
  65. void doMausEreignis( MausEreignis &me ) override
  66. {
  67. lockZeichnung();
  68. maus.x = me.mx;
  69. maus.y = me.my;
  70. if( me.id == ME_RLinks )
  71. {
  72. mausAlt.x = me.mx;
  73. mausAlt.y = me.my;
  74. }
  75. hp = Vertex( 0, 0 );
  76. speed = Vertex( 0, 0 );
  77. if( mdl.zModel()->calcHitPoint( mausAlt - Vertex( 150, 150 ), maus - mausAlt, "ship", hp, speed, rot ) )
  78. {
  79. if( me.id == ME_RRechts )
  80. {
  81. Polygon2D a;
  82. Polygon2D b;
  83. Punkt pa;
  84. Punkt pb;
  85. mdl.zModel()->split( mausAlt - Vertex( 150, 150 ), maus - mausAlt, "ship", a, b, pa, pb, []()
  86. {
  87. return rand() / (double)RAND_MAX;
  88. } );
  89. Array< Polygon2D > *aa = new Array< Polygon2D >();
  90. aa->add( a );
  91. Model2DData *ad = new Model2DData();
  92. ad->erstelleModell( aa );
  93. Array< Polygon2D > *ba = new Array< Polygon2D >();
  94. ba->add( b );
  95. Model2DData *bd = new Model2DData();
  96. bd->erstelleModell( ba );
  97. mdlA.setModel( ad );
  98. mdlB.setModel( bd );
  99. mdlA.setTextur( txt.getThis() );
  100. mdlB.setTextur( txt.getThis() );
  101. mdlA.addStyle( Model2D::Style::Sichtbar );
  102. mdlB.addStyle( Model2D::Style::Sichtbar );
  103. }
  104. }
  105. unlockZeichnung();
  106. }
  107. bool tick( double t ) override
  108. {
  109. return 1;
  110. }
  111. void render( Bild &bild ) override
  112. {
  113. lockZeichnung();
  114. mdl.render( bild );
  115. mdlA.render( bild );
  116. mdlB.render( bild );
  117. bild.fillCircle( maus.x, maus.y, 1, 0xFFFF0000 );
  118. bild.drawLinie( mausAlt, maus, 0xFF00FF00 );
  119. bild.fillCircle( hp.x + 150, hp.y + 150, 1, 0xFF0000FF );
  120. bild.drawLinie( Punkt( 150, 150 ), speed + Punkt( 150, 150 ), 0xFF00FF00 );
  121. for( int i = 1; i < 10; i++ )
  122. {
  123. Vertex pos = hp + ( maus - mausAlt ) * i + Vertex( 150, 150 );
  124. Vertex pos2 = hp + ( maus - mausAlt ) * ( i - 1 ) + Vertex( 150, 150 );
  125. bild.drawLinie( pos, pos2, 0xFFFF0000 );
  126. bild.fillCircle( pos.x, pos.y, 1, 0xFF00FFFF );
  127. }
  128. unlockZeichnung();
  129. }
  130. };
  131. KSGScriptEditor *obj;
  132. void FClose( void *p, void *zF )
  133. {
  134. StopNachrichtenSchleife( ( (WFenster*)zF )->getFensterHandle() );
  135. }
  136. int kamera2DTest();
  137. int rotationTest();
  138. int main()
  139. {
  140. //return rotationTest();
  141. return kamera2DTest();
  142. Datei d;
  143. Datei d2;
  144. d.setDatei( "data_old.map" );
  145. d2.setDatei( "data.map" );
  146. d2.open( Datei::Style::schreiben );
  147. d.open( Datei::Style::lesen );
  148. int ressourceAnz = 0;
  149. d.lese( (char*)&ressourceAnz, 4 );
  150. d2.schreibe( (char*)&ressourceAnz, 4 );
  151. for( int i = 0; i < ressourceAnz; i++ )
  152. {
  153. int j = 0;
  154. d.lese( (char*)&j, 4 );
  155. d2.schreibe( (char*)&j, 4 );
  156. char len = 0;
  157. d.lese( &len, 1 );
  158. d2.schreibe( (char*)&len, 1 );
  159. Text txt;
  160. txt.fillText( '0', len + 1 );
  161. d.lese( txt, len );
  162. d2.schreibe( (char*)txt, len );
  163. }
  164. d.lese( (char*)&ressourceAnz, 4 );
  165. d2.schreibe( (char*)&ressourceAnz, 4 );
  166. d.lese( (char*)&ressourceAnz, 4 );
  167. d2.schreibe( (char*)&ressourceAnz, 4 );
  168. d.lese( (char*)&ressourceAnz, 4 );
  169. d2.schreibe( (char*)&ressourceAnz, 4 );
  170. for( int i = 0; i < ressourceAnz; i++ )
  171. {
  172. int j = 0;
  173. d.lese( (char*)&j, 4 );
  174. d2.schreibe( (char*)&j, 4 );
  175. d.lese( (char*)&j, 4 );
  176. d2.schreibe( (char*)&j, 4 );
  177. d.lese( (char*)&j, 4 );
  178. d2.schreibe( (char*)&j, 4 );
  179. d.lese( (char*)&j, 4 );
  180. d2.schreibe( (char*)&j, 4 );
  181. d.lese( (char*)&j, 4 );
  182. d2.schreibe( (char*)&j, 4 );
  183. d.lese( (char*)&j, 4 );
  184. d2.schreibe( (char*)&j, 4 );
  185. d.lese( (char*)&j, 4 );
  186. d2.schreibe( (char*)&j, 4 );
  187. d.lese( (char*)&j, 4 );
  188. d2.schreibe( (char*)&j, 4 );
  189. d.lese( (char*)&j, 4 );
  190. d2.schreibe( (char*)&j, 4 );
  191. double f = 0;
  192. d.lese( (char*)&f, 8 );
  193. d2.schreibe( (char*)&f, 8 );
  194. d.lese( (char*)&f, 8 );
  195. d2.schreibe( (char*)&f, 8 );
  196. char t = 0;
  197. d.lese( &t, 1 );
  198. d2.schreibe( (char*)&t, 1 );
  199. }
  200. for( int i = 0; i < 9; i++ )
  201. {
  202. int j = 0;
  203. double f = 0;
  204. d.lese( (char*)&j, 4 );
  205. d2.schreibe( (char*)&j, 4 );
  206. d.lese( (char*)&j, 4 );
  207. d2.schreibe( (char*)&j, 4 );
  208. d.lese( (char*)&j, 4 );
  209. d2.schreibe( (char*)&j, 4 );
  210. d.lese( (char*)&f, 8 );
  211. d2.schreibe( (char*)&f, 8 );
  212. d.lese( (char*)&f, 8 );
  213. f = 5;
  214. d2.schreibe( (char*)&f, 8 );
  215. d.lese( (char*)&j, 4 );
  216. d2.schreibe( (char*)&j, 4 );
  217. d.lese( (char*)&j, 4 );
  218. d2.schreibe( (char*)&j, 4 );
  219. d.lese( (char*)&f, 8 );
  220. d2.schreibe( (char*)&f, 8 );
  221. d.lese( (char*)&f, 8 );
  222. d2.schreibe( (char*)&f, 8 );
  223. d.lese( (char*)&j, 4 );
  224. d2.schreibe( (char*)&j, 4 );
  225. d.lese( (char*)&j, 4 );
  226. d2.schreibe( (char*)&j, 4 );
  227. d.lese( (char*)&j, 4 );
  228. d2.schreibe( (char*)&j, 4 );
  229. d.lese( (char*)&f, 8 );
  230. d2.schreibe( (char*)&f, 8 );
  231. double antriebsEffizienz = 100;
  232. d.lese( (char*)&antriebsEffizienz, 8 );
  233. d2.schreibe( (char*)&antriebsEffizienz, 8 );
  234. d.lese( (char*)&j, 4 );
  235. d2.schreibe( (char*)&j, 4 );
  236. d.lese( (char*)&j, 4 );
  237. d2.schreibe( (char*)&j, 4 );
  238. d.lese( (char*)&j, 4 );
  239. d2.schreibe( (char*)&j, 4 );
  240. d.lese( (char*)&j, 4 );
  241. d2.schreibe( (char*)&j, 4 );
  242. }
  243. for( int i = 0; i < 3; i++ )
  244. {
  245. int j = 0;
  246. double f = 0;
  247. d.lese( (char*)&j, 4 );
  248. d2.schreibe( (char*)&j, 4 );
  249. d.lese( (char*)&j, 4 );
  250. d2.schreibe( (char*)&j, 4 );
  251. d.lese( (char*)&f, 8 );
  252. d2.schreibe( (char*)&f, 8 );
  253. d.lese( (char*)&j, 4 );
  254. d2.schreibe( (char*)&j, 4 );
  255. d.lese( (char*)&j, 4 );
  256. d2.schreibe( (char*)&j, 4 );
  257. d.lese( (char*)&f, 8 );
  258. d2.schreibe( (char*)&f, 8 );
  259. d.lese( (char*)&f, 8 );
  260. d2.schreibe( (char*)&f, 8 );
  261. d.lese( (char*)&j, 4 );
  262. d2.schreibe( (char*)&j, 4 );
  263. d.lese( (char*)&j, 4 );
  264. d2.schreibe( (char*)&j, 4 );
  265. d.lese( (char*)&j, 4 );
  266. d2.schreibe( (char*)&j, 4 );
  267. d.lese( (char*)&f, 8 );
  268. d2.schreibe( (char*)&f, 8 );
  269. double antriebsEffizienz = 0;
  270. d.lese( (char*)&antriebsEffizienz, 8 );
  271. d2.schreibe( (char*)&antriebsEffizienz, 8 );
  272. d.lese( (char*)&j, 4 );
  273. d2.schreibe( (char*)&j, 4 );
  274. }
  275. d.close();
  276. d2.close();
  277. getchar();
  278. return 0;
  279. #ifdef _DEBUG
  280. _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
  281. #endif
  282. initFramework();
  283. WFenster *f = new WFenster();
  284. WNDCLASS fc = F_Normal( 0 );
  285. fc.lpszClassName = "Test";
  286. f->erstellen( WS_OVERLAPPEDWINDOW, fc );
  287. f->setSize( 900, 900 );
  288. f->setPosition( Punkt( 100, 100 ) );
  289. f->setVSchließAktion( FClose );
  290. f->setMausAktion( _ret1ME );
  291. f->setTastaturAktion( _ret1TE );
  292. f->setAnzeigeModus( 1 );
  293. Bildschirm *b = new Bildschirm3D( f->getThis() );
  294. b->setBackBufferSize( 300, 300 );
  295. f->setBildschirm( b->getThis() );
  296. b->setTestRend( 0 );
  297. Obj o;
  298. b->addMember( &o );
  299. b->update();
  300. RenderTh *r = new RenderTh();
  301. r->setBildschirm( b->getThis() );
  302. r->setMaxFps( 60 );
  303. r->beginn();
  304. StartNachrichtenSchleife();
  305. r->beenden();
  306. r->release();
  307. f->setBildschirm( 0 );
  308. b->release();
  309. f->release();
  310. releaseFramework();
  311. return 0;
  312. }