fPortalC.cpp 5.0 KB

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