Unit1.cpp 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include "Unit1.h"
  5. //---------------------------------------------------------------------------
  6. #pragma package(smart_init)
  7. #pragma link "GLBaseClasses"
  8. #pragma link "GLCadencer"
  9. #pragma link "GLCoordinates"
  10. #pragma link "GLCrossPlatform"
  11. #pragma link "GLMaterial"
  12. #pragma link "GLObjects"
  13. #pragma link "GLPortal"
  14. #pragma link "GLScene"
  15. #pragma link "GLVectorFileObjects"
  16. #pragma link "GLWin32Viewer"
  17. #pragma resource "*.dfm"
  18. TForm1 *Form1;
  19. //---------------------------------------------------------------------------
  20. __fastcall TForm1::TForm1(TComponent* Owner)
  21. : TForm(Owner)
  22. {
  23. }
  24. //---------------------------------------------------------------------------
  25. void __fastcall TForm1::FormCreate(TObject *Sender)
  26. {
  27. SetGLSceneMediaDir();
  28. int i;
  29. for (i=0; i < 15; i++)
  30. SGMap->Cells[i][i] = 'X';
  31. SGMap->Cells[8][8] = " ";
  32. SGMap->Col = 8;
  33. SGMap->Row = 12;
  34. GLMaterialLibrary1->AddTextureMaterial("gnd", "walkway.jpg");
  35. GLMaterialLibrary1->AddTextureMaterial("wall", "rawwall.jpg")->TextureScale->Y = 3;
  36. BBProcessClick(Sender);
  37. }
  38. //---------------------------------------------------------------------------
  39. void __fastcall TForm1::BBProcessClick(TObject *Sender)
  40. {
  41. int x, y, n;
  42. float h;
  43. TSectorMeshObject *Sector;
  44. TFGPolygon *Poly;
  45. h=3;
  46. portalCount = 0;
  47. triangleCount = 0;
  48. Portal1->MeshObjects->Clear();
  49. for (x = -7; x < 8; x++)
  50. for (y = -7; y < 8; y++)
  51. {
  52. Sector = new TSectorMeshObject;
  53. Sector = (TSectorMeshObject*)(Portal1->MeshObjects);
  54. n = Sector->Vertices->Count;
  55. Sector->Vertices->Add(x, 0, y); Sector->Vertices->Add(x+1, 0, y);
  56. Sector->Vertices->Add(x+1, 0, y+1); Sector->Vertices->Add(x, 0, y+1);
  57. Sector->Vertices->Add((float)x, h, (float)y);
  58. Sector->Vertices->Add((float)x+1, h, (float)y);
  59. Sector->Vertices->Add((float)x+1, h, (float)y+1);
  60. Sector->Vertices->Add((float)x, h, (float)y+1);
  61. Sector->TexCoords->Add(0, 0, 0); Sector->TexCoords->Add(1, 0, 0);
  62. Sector->TexCoords->Add(1, 1, 0); Sector->TexCoords->Add(0, 1, 0);
  63. // ground
  64. Sector->Normals->Add(0, 1, 0);
  65. if (SGMap->Cells[x+7][y+7]=="")
  66. {
  67. Poly = new TFGPolygon;
  68. Poly = (TFGPolygon*)(Sector->FaceGroups);
  69. Poly->MaterialName = "gnd";
  70. Poly->Add(n+0, 0, 0); Poly->Add(n+3, 0, 3);
  71. Poly->Add(n+2, 0, 2); Poly->Add(n+1, 0, 1);
  72. }
  73. // front wall
  74. Sector->Normals->Add(0, 0, 1);
  75. if ((y=-7) || (SGMap->Cells[x+7][y-1+7]!=""))
  76. {
  77. Poly = new TFGPolygon;
  78. Poly = (TFGPolygon*)(Sector->FaceGroups);
  79. Poly->MaterialName = "wall";
  80. triangleCount++; triangleCount++; // Inc(triangleCount, 2);
  81. }
  82. else
  83. {
  84. Poly = new TFGPortalPolygon;
  85. Poly = (TFGPortalPolygon*)(Sector->FaceGroups);
  86. //Delphi - TFGPortalPolygon(poly).DestinationSectorIndex:=(x+7)*16+(y-1+7);
  87. //-TFGPortalPolygon(Poly)->DestinationSectorIndex = (x+7)*16+(y-1+7); ???
  88. portalCount++;
  89. }
  90. Poly->Add(n+0, 1, 3); Poly->Add(n+1, 1, 2);
  91. Poly->Add(n+5, 1, 1); Poly->Add(n+4, 1, 0);
  92. // left wall
  93. Sector->Normals->Add(1, 0, 0);
  94. if ((x==-7) || (SGMap->Cells[x-1+7][y+7]!=""))
  95. {
  96. Poly = new TFGPolygon;
  97. Poly = (TFGPolygon*) (Sector->FaceGroups);
  98. Poly->MaterialName = "wall";
  99. triangleCount++; triangleCount++; //Inc(triangleCount, 2);
  100. }
  101. else
  102. {
  103. //Delphi - Poly = TFGPortalPolygon.CreateOwned(Sector.FaceGroups);
  104. Poly = new TFGPortalPolygon;
  105. Poly = (TFGPortalPolygon*)(Sector->FaceGroups);
  106. //-TFGPortalPolygon(poly)->DestinationSectorIndex = (x-1+7)*16+(y+7);
  107. portalCount++;
  108. }
  109. Poly->Add(n+4, 2, 1); Poly->Add(n+7, 2, 0);
  110. Poly->Add(n+3, 2, 3); Poly->Add(n+0, 2, 2);
  111. // right wall
  112. Sector->Normals->Add(-1, 0, 0);
  113. if ((x==8) || (SGMap->Cells[x+1+7][y+7]!=""))
  114. {
  115. Poly = new TFGPolygon;
  116. Poly = (TFGPolygon*)(Sector->FaceGroups);
  117. Poly->MaterialName = "wall";
  118. triangleCount++; triangleCount++; //Inc(triangleCount, 2);
  119. }
  120. else
  121. {
  122. //Delphi - Poly = TFGPortalPolygon.CreateOwned(Sector.FaceGroups);
  123. Poly = new TFGPortalPolygon;
  124. Poly = (TFGPortalPolygon*)(Sector->FaceGroups);
  125. //-TFGPortalPolygon(Poly)->DestinationSectorIndex = (x+1+7)*16+(y+7);
  126. portalCount++;
  127. }
  128. Poly->Add(n+1, 3, 3); Poly->Add(n+2, 3, 2);
  129. Poly->Add(n+6, 3, 1); Poly->Add(n+5, 3, 0);
  130. // back wall
  131. Sector->Normals->Add(0, 0, 1);
  132. if ((y=8) || (SGMap->Cells[x+7][y+1+7] != ""))
  133. {
  134. Poly = new TFGPolygon;
  135. Poly = (TFGPolygon*)(Sector->FaceGroups);
  136. Poly->MaterialName = "wall";
  137. triangleCount++; triangleCount++; // Inc(triangleCount, 2);
  138. }
  139. else
  140. {
  141. //Delphi - Poly = TFGPortalPolygon.CreateOwned(Sector.FaceGroups);
  142. Poly = new TFGPortalPolygon;
  143. Poly = (TFGPortalPolygon*)(Sector->FaceGroups);
  144. //-TFGPortalPolygon(Poly)->DestinationSectorIndex = (x+7)*16+(y+1+7);
  145. portalCount++;
  146. }
  147. Poly->Add(n+3, 4, 2); Poly->Add(n+7, 4, 1);
  148. Poly->Add(n+6, 4, 0); Poly->Add(n+2, 4, 3);
  149. }
  150. Portal1->StructureChanged();
  151. }
  152. //---------------------------------------------------------------------------