RotationTest.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. #include <Fenster.h>
  2. #include <Bildschirm.h>
  3. #include <RenderThread.h>
  4. #include <Welt2D.h>
  5. #include <M2Datei.h>
  6. #include <Model2D.h>
  7. #include <DateiSystem.h>
  8. #include <Textur2D.h>
  9. #include <Kamera2D.h>
  10. #include <iostream>
  11. #include <Bild.h>
  12. using namespace Framework;
  13. namespace Framework
  14. {
  15. void initFramework();
  16. void releaseFramework();
  17. }
  18. void FClose( void *p, void *zF );
  19. extern Punkt p1;
  20. extern Punkt p2;
  21. Model2DObject *obj;
  22. Model2DObject *obj2;
  23. int rotationTest()
  24. {
  25. p1 = Punkt( -1, -1 );
  26. initFramework();
  27. Welt2D w2d;
  28. Welt2D *w2 = &w2d;
  29. Kamera2D kam2d;
  30. Kamera2D *kam2 = &kam2d;
  31. WNDCLASS wndC = Framework::F_Normal( 0 );
  32. wndC.lpszClassName = "Kamera 2D Test";
  33. WFenster f;
  34. f.erstellen( WS_OVERLAPPEDWINDOW, wndC );
  35. f.setPosition( Punkt( 100, 100 ) );
  36. f.setSize( 900, 900 );
  37. f.setVSchließAktion( FClose );
  38. f.setMausAktion( [ w2, kam2 ]( void *p, void *o, MausEreignis me )
  39. {
  40. p2 = Punkt( me.mx, me.my );
  41. if( me.id == ME_RRechts )
  42. {
  43. Vertex wp = kam2->getWorldCoordinates( Punkt( me.mx, me.my ) );
  44. w2->explosion( wp, 100000, 10000 );
  45. }
  46. if( me.id == ME_RLinks )
  47. {
  48. if( p1 == Punkt( -1, -1 ) )
  49. p1 = Punkt( me.mx, me.my );
  50. else
  51. {
  52. w2->impuls( kam2->getWorldCoordinates( p1 ), kam2->getWorldDirection( Vertex( me.mx, me.my ) - (Vertex)p1 ) );
  53. p1 = Punkt( -1, -1 );
  54. }
  55. }
  56. return 1;
  57. } );
  58. f.setTastaturAktion( _ret1TE );
  59. f.setAnzeigeModus( 1 );
  60. Bildschirm2D b( f.getThis() );
  61. b.update();
  62. b.setTestRend( 0 );
  63. b.setFill( 0 );
  64. f.setBildschirm( b.getThis() );
  65. RenderTh rth;
  66. rth.setBildschirm( b.getThis() );
  67. rth.setRenderFunktion( []( void*a, void*rth, Bild*c )
  68. {
  69. c->fillRegion( 0, 0, c->getBreite(), c->getHeight(), 0xFF000000 );
  70. std::cout << "FPS: " << ( 1 / ( (RenderTh*)rth )->getRenderTickZeit() ) << " | Zeit pro Tick:" << ( (RenderTh*)rth )->getRenderTickZeit() << "\n";
  71. if( p1 != Punkt( -1, -1 ) )
  72. c->drawLinie( p1, p2, 0xFFFFFFFF );
  73. obj2->setDrehung( obj->getDrehung() );
  74. Vertex speed( 1, 0 );
  75. speed = speed.rotation( obj->getDrehung() );
  76. float faktor = -1;
  77. if( obj->getDrehung() > PI )
  78. faktor = -faktor;
  79. if( obj->getDrehung() < -PI )
  80. faktor = -faktor;
  81. obj2->addDrehung( faktor * speed.angle( Vertex( 1, 0 ) ) );
  82. } );
  83. M2Datei d;
  84. d.setPfad( "ship.m2" );
  85. d.leseDaten();
  86. Model2DData *m = d.ladeModel( "ship" );
  87. LTDBDatei td;
  88. td.setDatei( new Text( "ship.ltdb" ) );
  89. td.leseDaten( 0 );
  90. Bild *bt = td.laden( 0, new Text( "a.png" ) );
  91. Textur2D txt;
  92. txt.setTexturZ( bt );
  93. obj = new Model2DObject();
  94. obj->setModel( m->getThis() );
  95. obj->setTextur( txt.getThis(), "ship" );
  96. obj->setDrehungSpeed( -0.5 );
  97. w2d.addObject( obj );
  98. obj2 = new Model2DObject();
  99. obj2->setPosition( 200, 0 );
  100. obj2->setModel( m->getThis() );
  101. obj2->setTextur( txt.getThis(), "ship" );
  102. w2d.addObject( obj2 );
  103. rth.beginn();
  104. kam2d.setStyle( Kamera2D::Style::Sichtbar );
  105. kam2d.setSize( 900, 900 );
  106. kam2d.setWelt( w2d.getThis() );
  107. b.addMember( &kam2d );
  108. StartNachrichtenSchleife();
  109. rth.beenden();
  110. return 0;
  111. }