MainFormUnit.pas 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. unit MainFormUnit;
  2. interface
  3. uses
  4. Winapi.OpenGL,
  5. System.SysUtils,
  6. System.Classes,
  7. Vcl.Graphics,
  8. Vcl.Controls,
  9. Vcl.Forms,
  10. Vcl.Dialogs,
  11. Vcl.Menus,
  12. Vcl.StdCtrls,
  13. Vcl.ExtDlgs,
  14. GLS.Gui,
  15. GLS.Scene,
  16. GLS.SceneViewer,
  17. GLS.Objects,
  18. GLS.HUDObjects,
  19. GLS.Windows,
  20. GLS.BitmapFont,
  21. GLS.WindowsFont,
  22. GLS.Texture,
  23. FmGuiSkinEditor,
  24. GLS.Material,
  25. GLS.Coordinates,
  26. GLS.BaseClasses,
  27. GLS.Utils, Vcl.ExtCtrls;
  28. type
  29. TForm1 = class(TForm)
  30. MainMenu1: TMainMenu;
  31. File1: TMenuItem;
  32. Open1: TMenuItem;
  33. Save1: TMenuItem;
  34. Close1: TMenuItem;
  35. N1: TMenuItem;
  36. Import1: TMenuItem;
  37. N2: TMenuItem;
  38. Exit1: TMenuItem;
  39. OpenDialog: TOpenDialog;
  40. SaveDialog: TSaveDialog;
  41. GLGuiLayout1: TGLGuiLayout;
  42. ImportDialog: TOpenDialog;
  43. Edit1: TMenuItem;
  44. EditLayout1: TMenuItem;
  45. ListPopup: TPopupMenu;
  46. Add1: TMenuItem;
  47. Remove1: TMenuItem;
  48. Edit2: TMenuItem;
  49. N3: TMenuItem;
  50. GLScene1: TGLScene;
  51. GLSceneViewer1: TGLSceneViewer;
  52. GLCamera1: TGLCamera;
  53. GLPanel1: TGLPanel;
  54. WindowsBitmapFont1: TGLWindowsBitmapFont;
  55. Image1: TMenuItem;
  56. Load1: TMenuItem;
  57. OpenPictureDialog: TOpenPictureDialog;
  58. GLMaterialLibrary1: TGLMaterialLibrary;
  59. HUDSprite1: TGLHUDSprite;
  60. Panel1: TPanel;
  61. ListBox: TListBox;
  62. Button2: TButton;
  63. Button1: TButton;
  64. Edit3: TEdit;
  65. Label1: TLabel;
  66. procedure Open1Click(Sender: TObject);
  67. procedure Save1Click(Sender: TObject);
  68. procedure Close1Click(Sender: TObject);
  69. procedure Import1Click(Sender: TObject);
  70. procedure EditLayout1Click(Sender: TObject);
  71. procedure Add1Click(Sender: TObject);
  72. procedure Remove1Click(Sender: TObject);
  73. procedure Edit2Click(Sender: TObject);
  74. procedure ListBoxClick(Sender: TObject);
  75. procedure Load1Click(Sender: TObject);
  76. procedure Edit3Change(Sender: TObject);
  77. procedure Exit1Click(Sender: TObject);
  78. procedure FormCreate(Sender: TObject);
  79. procedure Button1Click(Sender: TObject);
  80. procedure Edit3KeyPress(Sender: TObject; var Key: Char);
  81. procedure Button2Click(Sender: TObject);
  82. private
  83. public
  84. Procedure UpdateLayoutList;
  85. end;
  86. var
  87. Form1: TForm1;
  88. implementation
  89. {$R *.dfm}
  90. procedure TForm1.FormCreate(Sender: TObject);
  91. var
  92. I : Integer;
  93. begin
  94. var Path: TFileName := GetCurrentAssetPath();
  95. SetCurrentDir(Path + '\skin');
  96. GLMaterialLibrary1.Materials[0].Material.Texture.Image. LoadFromFile('DefaultSkin.bmp');
  97. end;
  98. procedure TForm1.Open1Click(Sender: TObject);
  99. begin
  100. OpenDialog.InitialDir := GetCurrentDir();
  101. If OpenDialog.Execute then
  102. Begin
  103. GLScene1.BeginUpdate;
  104. try
  105. GLGuiLayout1.Clear;
  106. GLGuiLayout1.LoadFromFile(OpenDialog.FileName);
  107. UpdateLayoutList;
  108. finally
  109. GLScene1.EndUpdate;
  110. end;
  111. End;
  112. end;
  113. procedure TForm1.Save1Click(Sender: TObject);
  114. begin
  115. if SaveDialog.Execute then
  116. Begin
  117. GLGuiLayout1.SaveToFile(SaveDialog.FileName);
  118. End;
  119. end;
  120. procedure TForm1.Close1Click(Sender: TObject);
  121. begin
  122. GLScene1.BeginUpdate;
  123. try
  124. GLGuiLayout1.Clear;
  125. UpdateLayoutList;
  126. finally
  127. GLScene1.EndUpdate;
  128. end;
  129. End;
  130. procedure TForm1.Import1Click(Sender: TObject);
  131. Var
  132. XC : Integer;
  133. begin
  134. if ImportDialog.Execute then
  135. Begin
  136. GLScene1.BeginUpdate;
  137. try
  138. For XC := 0 to ImportDialog.Files.Count-1 do
  139. Begin
  140. try
  141. GLGuiLayout1.LoadFromFile(ImportDialog.Files[XC]);
  142. except
  143. end;
  144. End;
  145. UpdateLayoutList;
  146. finally
  147. GLScene1.EndUpdate;
  148. end;
  149. End;
  150. end;
  151. procedure TForm1.EditLayout1Click(Sender: TObject);
  152. begin
  153. Hide;
  154. GLScene1.BeginUpdate;
  155. try
  156. If ListBox.ItemIndex >= 0 then
  157. GUIComponentDialog((ListBox.Items.Objects[ListBox.ItemIndex] as TGLGuiComponent).Elements)
  158. finally
  159. GLScene1.EndUpdate;
  160. Show;
  161. end;
  162. end;
  163. Procedure TForm1.UpdateLayoutList;
  164. var
  165. i : Integer;
  166. begin
  167. ListBox.Clear;
  168. With GLGuiLayout1.GuiComponents do for i:=0 to Count-1 do
  169. ListBox.Items.AddObject(Items[i].Name, Items[i]);
  170. ListBox.Selected[GLGuiLayout1.GuiComponents.Count-1] := True;
  171. End;
  172. procedure TForm1.Add1Click(Sender: TObject);
  173. Var
  174. GuiComp : TGLGuiComponent;
  175. begin
  176. GuiComp := GLGuiLayout1.GuiComponents.Add as TGLGuiComponent;
  177. If ListBox.ItemIndex >= 0 then
  178. begin
  179. GuiComp.Name := 'Newly Added';
  180. end else GuiComp.Name := Edit3.Text;
  181. UpdateLayoutList;
  182. end;
  183. procedure TForm1.Remove1Click(Sender: TObject);
  184. Var
  185. S : String;
  186. begin
  187. If ListBox.ItemIndex >= 0 then
  188. Begin
  189. GLScene1.BeginUpdate;
  190. try
  191. GLGuiLayout1.GUIComponents.Delete(ListBox.ItemIndex);
  192. ListBox.Items.Delete(ListBox.ItemIndex);
  193. S := GLPanel1.GuiLayoutName;
  194. GLPanel1.GuiLayoutName := '';
  195. GLPanel1.GuiLayoutName := S;
  196. finally
  197. GLScene1.EndUpdate;
  198. end;
  199. End;
  200. end;
  201. procedure TForm1.Edit2Click(Sender: TObject);
  202. begin
  203. If ListBox.ItemIndex >= 0 then
  204. GUIComponentDialog((ListBox.Items.Objects[ListBox.ItemIndex] as TGLGuiComponent).Elements)
  205. end;
  206. procedure TForm1.ListBoxClick(Sender: TObject);
  207. begin
  208. GLScene1.BeginUpdate;
  209. try
  210. If ListBox.ItemIndex >= 0 then
  211. Begin
  212. GLPanel1.GuiLayoutName := GLGuiLayout1.GuiComponents.Items[ListBox.ItemIndex].Name;
  213. Edit3.text := GLPanel1.GuiLayoutName;
  214. End else
  215. Begin
  216. GLPanel1.GuiLayoutName := '';
  217. Edit3.text := 'Newly Added';
  218. End;
  219. GLPanel1.DoChanges;
  220. finally
  221. GLScene1.EndUpdate;
  222. end;
  223. end;
  224. procedure TForm1.Load1Click(Sender: TObject);
  225. Var
  226. Mat : TGLLibMaterial;
  227. MatName : String;
  228. begin
  229. If OpenPictureDialog.Execute then
  230. Begin
  231. GLScene1.BeginUpdate;
  232. try
  233. MatName := ExtractFileName(OpenPictureDialog.FileName);
  234. Mat := GLMaterialLibrary1.Materials.GetLibMaterialByName(MatName);
  235. If not Assigned(Mat) then
  236. Begin
  237. GLMaterialLibrary1.AddTextureMaterial(MatName,OpenPictureDialog.FileName).Material.Texture.TextureMode := tmReplace;
  238. End;
  239. GLGuiLayout1.Material.LibMaterialName := MatName;
  240. HUDSprite1.Material.LibMaterialName := MatName;
  241. finally
  242. GLScene1.EndUpdate;
  243. end;
  244. End;
  245. end;
  246. procedure TForm1.Edit3Change(Sender: TObject);
  247. begin
  248. If (ListBox.ItemIndex >= 0) then
  249. Begin
  250. ListBox.Items[ListBox.ItemIndex] := Edit3.Text;
  251. GLGuiLayout1.GuiComponents.Items[ListBox.ItemIndex].Name := Edit3.Text;
  252. End;
  253. end;
  254. procedure TForm1.Exit1Click(Sender: TObject);
  255. begin
  256. Application.Terminate;
  257. end;
  258. procedure TForm1.Button1Click(Sender: TObject);
  259. begin
  260. Add1Click(Sender);
  261. end;
  262. procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
  263. begin
  264. If Key = #13 then Add1Click(Sender);
  265. end;
  266. procedure TForm1.Button2Click(Sender: TObject);
  267. begin
  268. Edit2Click(Sender);
  269. end;
  270. end.