gameObjectCreator.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. function GameObjectModuleList::onWake(%this)
  2. {
  3. %this.refresh();
  4. }
  5. function GameObjectModuleList::refresh(%this)
  6. {
  7. %this.clear();
  8. //First, get our list of modules
  9. %moduleList = ModuleDatabase.findModules();
  10. %count = getWordCount(%moduleList);
  11. for(%i=0; %i < %count; %i++)
  12. {
  13. %moduleName = getWord(%moduleList, %i);
  14. %this.add(%moduleName.ModuleId, %i);
  15. }
  16. }
  17. function GameObjectCreatorPkgBtn::onClick(%this)
  18. {
  19. Canvas.pushDialog(AssetBrowser_AddModule);
  20. AssetBrowser_addModuleWindow.selectWindow();
  21. }
  22. function GameObjectCreateBtn::onClick(%this)
  23. {
  24. %className = GameObjectCreatorName.getText();
  25. if(%className $= "")
  26. {
  27. error("Attempted to make a new Game Object with no name!");
  28. Canvas.popDialog(GameObjectCreator);
  29. return;
  30. }
  31. //First, find out if this one already exists. If so, we're obviously merely updating it
  32. //also, exec any components that may exist
  33. //find all GameObjectAssets
  34. %assetQuery = new AssetQuery();
  35. AssetDatabase.findAssetType(%assetQuery, "GameObjectAsset");
  36. %count = %assetQuery.getCount();
  37. %createNew = true;
  38. for(%i=0; %i < %count; %i++)
  39. {
  40. %assetId = %assetQuery.getAsset(%i);
  41. %gameObjectAsset = AssetDatabase.acquireAsset(%assetId);
  42. if(%gameObjectAsset.gameObjectName $= %className)
  43. {
  44. %createNew = false;
  45. break;
  46. }
  47. }
  48. %selectedEntity = GameObjectCreator.selectedEntity;
  49. %selectedEntity.class = %className;
  50. Inspector.inspect(%selectedEntity);
  51. if(%createNew)
  52. {
  53. //get the selected module data
  54. %moduleName = GameObjectModuleList.getText();
  55. %selectedEntity.gameObject = %moduleName @ ":" @ %className;
  56. %path = "data/" @ %moduleName @ "/gameObjects/";
  57. %file = new FileObject();
  58. if(%file.openForWrite(%path @ "\\" @ %className @ ".cs"))
  59. {
  60. %file.writeline("function " @ %className @ "::onAdd(%this)\n{\n\n}\n");
  61. %file.writeline("function " @ %className @ "::onRemove(%this)\n{\n\n}\n");
  62. //todo, pre-write any event functions of interest
  63. %file.close();
  64. }
  65. //set up the paths
  66. %tamlPath = %path @ %className @ ".taml";
  67. %scriptPath = %path @ %className @ ".cs";
  68. saveGameObject(%className, %tamlPath, %scriptPath);
  69. %asset = new GameObjectAsset()
  70. {
  71. AssetName = %className;
  72. VersionId = 1;
  73. gameObjectName=%className;
  74. TAMLFilePath = %tamlPath;
  75. scriptFilePath = %scriptPath;
  76. };
  77. %assetPath = %path @ %className @ ".asset.taml";
  78. //now, add the script file and a ref to the taml into our SGO manifest so we can readily spawn it later.
  79. TamlWrite(%selectedEntity, %tamlpath);
  80. TamlWrite(%asset, %assetPath);
  81. GameObjectCreator.selectedEntity = "";
  82. Canvas.popDialog(GameObjectCreator);
  83. //Load it
  84. %moduleDef = ModuleDatabase.findModule(%moduleName,1);
  85. AssetDatabase.addDeclaredAsset(%moduleDef, %assetPath);
  86. }
  87. else
  88. {
  89. %moduleDef = AssetDatabase.getAssetModule(%assetId);
  90. %moduleName = %moduleDef.ModuleId;
  91. %path = "data/" @ %moduleName @ "/gameObjects/";
  92. %selectedEntity.gameObjectAsset = %moduleName @ ":" @ %className;
  93. %tamlPath = %path @ %className @ ".taml";
  94. TamlWrite(%selectedEntity, %tamlpath);
  95. GameObjectCreator.selectedEntity = "";
  96. Canvas.popDialog(GameObjectCreator);
  97. }
  98. }