fdGuiEditor.pas 6.6 KB

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