fPortalC.cpp 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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. TFileName Path = GetCurrentAssetPath();
  27. // Load textures for ground and walls
  28. SetCurrentDir(Path + "\\texture");
  29. int i;
  30. for (i=0; i < 15; i++)
  31. SGMap->Cells[i][i] = 'X';
  32. SGMap->Cells[8][8] = " ";
  33. SGMap->Col = 8;
  34. SGMap->Row = 12;
  35. GLMaterialLibrary1->AddTextureMaterial("gnd", "walkway.jpg");
  36. GLMaterialLibrary1->AddTextureMaterial("wall", "rawwall.jpg")->TextureScale->Y = 3;
  37. // BBProcessClick(NULL);
  38. }
  39. //---------------------------------------------------------------------------
  40. void __fastcall TForm1::BBProcessClick(TObject *Sender)
  41. {
  42. int x, y, n;
  43. float h;
  44. TGLSectorMeshObject *Sector;
  45. TFGPolygon *Poly;
  46. h=3;
  47. portalCount = 0;
  48. triangleCount = 0;
  49. Portal1->MeshObjects->Clear();
  50. for (x = -7; x < 8; x++)
  51. for (y = -7; y < 8; y++)
  52. {
  53. Sector = new TGLSectorMeshObject;
  54. Sector = (TGLSectorMeshObject*)(Portal1->MeshObjects);
  55. n = Sector->Vertices->Count;
  56. Sector->Vertices->Add(x, 0, y); Sector->Vertices->Add(x+1, 0, y);
  57. Sector->Vertices->Add(x+1, 0, y+1); Sector->Vertices->Add(x, 0, y+1);
  58. Sector->Vertices->Add((float)x, h, (float)y);
  59. Sector->Vertices->Add((float)x+1, h, (float)y);
  60. Sector->Vertices->Add((float)x+1, h, (float)y+1);
  61. Sector->Vertices->Add((float)x, h, (float)y+1);
  62. Sector->TexCoords->Add(0, 0, 0); Sector->TexCoords->Add(1, 0, 0);
  63. Sector->TexCoords->Add(1, 1, 0); Sector->TexCoords->Add(0, 1, 0);
  64. // ground
  65. Sector->Normals->Add(0, 1, 0);
  66. if (SGMap->Cells[x+7][y+7]=="")
  67. {
  68. Poly = new TFGPolygon;
  69. Poly = (TFGPolygon*)(Sector->FaceGroups);
  70. Poly->MaterialName = "gnd";
  71. Poly->Add(n+0, 0, 0); Poly->Add(n+3, 0, 3);
  72. Poly->Add(n+2, 0, 2); Poly->Add(n+1, 0, 1);
  73. }
  74. // front wall
  75. Sector->Normals->Add(0, 0, 1);
  76. if ((y=-7) || (SGMap->Cells[x+7][y-1+7]!=""))
  77. {
  78. Poly = new TFGPolygon;
  79. Poly = (TFGPolygon*)(Sector->FaceGroups);
  80. Poly->MaterialName = "wall";
  81. triangleCount++; triangleCount++; // Inc(triangleCount, 2);
  82. }
  83. else
  84. {
  85. Poly = new TFGPortalPolygon;
  86. Poly = (TFGPortalPolygon*)(Sector->FaceGroups);
  87. //Delphi - TFGPortalPolygon(poly).DestinationSectorIndex:=(x+7)*16+(y-1+7);
  88. //-TFGPortalPolygon(Poly)->DestinationSectorIndex = (x+7)*16+(y-1+7); ???
  89. portalCount++;
  90. }
  91. Poly->Add(n+0, 1, 3); Poly->Add(n+1, 1, 2);
  92. Poly->Add(n+5, 1, 1); Poly->Add(n+4, 1, 0);
  93. // left wall
  94. Sector->Normals->Add(1, 0, 0);
  95. if ((x==-7) || (SGMap->Cells[x-1+7][y+7]!=""))
  96. {
  97. Poly = new TFGPolygon;
  98. Poly = (TFGPolygon*) (Sector->FaceGroups);
  99. Poly->MaterialName = "wall";
  100. triangleCount++; triangleCount++; //Inc(triangleCount, 2);
  101. }
  102. else
  103. {
  104. //Delphi - Poly = TFGPortalPolygon.CreateOwned(Sector.FaceGroups);
  105. Poly = new TFGPortalPolygon;
  106. Poly = (TFGPortalPolygon*)(Sector->FaceGroups);
  107. //-TFGPortalPolygon(poly)->DestinationSectorIndex = (x-1+7)*16+(y+7);
  108. portalCount++;
  109. }
  110. Poly->Add(n+4, 2, 1); Poly->Add(n+7, 2, 0);
  111. Poly->Add(n+3, 2, 3); Poly->Add(n+0, 2, 2);
  112. // right wall
  113. Sector->Normals->Add(-1, 0, 0);
  114. if ((x==8) || (SGMap->Cells[x+1+7][y+7]!=""))
  115. {
  116. Poly = new TFGPolygon;
  117. Poly = (TFGPolygon*)(Sector->FaceGroups);
  118. Poly->MaterialName = "wall";
  119. triangleCount++; triangleCount++; //Inc(triangleCount, 2);
  120. }
  121. else
  122. {
  123. //in Delphi - Poly = TFGPortalPolygon.CreateOwned(Sector.FaceGroups);
  124. Poly = new TFGPortalPolygon;
  125. Poly = (TFGPortalPolygon*)(Sector->FaceGroups);
  126. //-TFGPortalPolygon(Poly)->DestinationSectorIndex = (x+1+7)*16+(y+7);
  127. portalCount++;
  128. }
  129. Poly->Add(n+1, 3, 3); Poly->Add(n+2, 3, 2);
  130. Poly->Add(n+6, 3, 1); Poly->Add(n+5, 3, 0);
  131. // back wall
  132. Sector->Normals->Add(0, 0, 1);
  133. if ((y=8) || (SGMap->Cells[x+7][y+1+7] != ""))
  134. {
  135. Poly = new TFGPolygon;
  136. Poly = (TFGPolygon*)(Sector->FaceGroups);
  137. Poly->MaterialName = "wall";
  138. triangleCount++; triangleCount++; // Inc(triangleCount, 2);
  139. }
  140. else
  141. {
  142. //in Delphi - Poly = TFGPortalPolygon.CreateOwned(Sector.FaceGroups);
  143. Poly = new TFGPortalPolygon;
  144. Poly = (TFGPortalPolygon*)(Sector->FaceGroups);
  145. //-TFGPortalPolygon(Poly)->DestinationSectorIndex = (x+7)*16+(y+1+7);
  146. portalCount++;
  147. }
  148. Poly->Add(n+3, 4, 2); Poly->Add(n+7, 4, 1);
  149. Poly->Add(n+6, 4, 0); Poly->Add(n+2, 4, 3);
  150. }
  151. Portal1->StructureChanged();
  152. }
  153. //---------------------------------------------------------------------------