MenuItems.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. using System;
  4. using BansheeEngine;
  5. namespace BansheeEditor
  6. {
  7. /// <summary>
  8. /// Contains various menu item callbacks for the main editor menu bar.
  9. /// </summary>
  10. static class MenuItems
  11. {
  12. /// <summary>
  13. /// Adds a camera component to the currently selected scene object.
  14. /// </summary>
  15. [MenuItem("Components/Camera", 7050)]
  16. private static void AddCamera()
  17. {
  18. SceneObject so = Selection.SceneObject;
  19. if (so == null)
  20. return;
  21. UndoRedo.RecordSO(so, false, "Added a Camera component");
  22. Camera cam = so.AddComponent<Camera>();
  23. cam.Main = true;
  24. EditorApplication.SetSceneDirty();
  25. }
  26. /// <summary>
  27. /// Adds a renderable component to the currently selected scene object.
  28. /// </summary>
  29. [MenuItem("Components/Renderable", 7049)]
  30. private static void AddRenderable()
  31. {
  32. SceneObject so = Selection.SceneObject;
  33. if (so == null)
  34. return;
  35. UndoRedo.RecordSO(so, false, "Added a Renderable component");
  36. so.AddComponent<Renderable>();
  37. EditorApplication.SetSceneDirty();
  38. }
  39. /// <summary>
  40. /// Adds a point light component to the currently selected scene object.
  41. /// </summary>
  42. [MenuItem("Components/Point light", 7048)]
  43. private static void AddPointLight()
  44. {
  45. SceneObject so = Selection.SceneObject;
  46. if (so == null)
  47. return;
  48. UndoRedo.RecordSO(so, false, "Added a Light component");
  49. Light light = so.AddComponent<Light>();
  50. light.Type = LightType.Point;
  51. EditorApplication.SetSceneDirty();
  52. }
  53. /// <summary>
  54. /// Adds a spot light component to the currently selected scene object.
  55. /// </summary>
  56. [MenuItem("Components/Spot light", 7047)]
  57. private static void AddSpotLight()
  58. {
  59. SceneObject so = Selection.SceneObject;
  60. if (so == null)
  61. return;
  62. UndoRedo.RecordSO(so, false, "Added a Light component");
  63. Light light = so.AddComponent<Light>();
  64. light.Type = LightType.Spot;
  65. EditorApplication.SetSceneDirty();
  66. }
  67. /// <summary>
  68. /// Adds a directional light component to the currently selected scene object.
  69. /// </summary>
  70. [MenuItem("Components/Directional light", 7046)]
  71. private static void AddDirectionalLight()
  72. {
  73. SceneObject so = Selection.SceneObject;
  74. if (so == null)
  75. return;
  76. UndoRedo.RecordSO(so, false, "Added a Light component");
  77. Light light = so.AddComponent<Light>();
  78. light.Type = LightType.Directional;
  79. EditorApplication.SetSceneDirty();
  80. }
  81. /// <summary>
  82. /// Adds a GUI widget component to the currently selected scene object.
  83. /// </summary>
  84. [MenuItem("Components/GUI widget", 7045)]
  85. private static void AddGUIWidget()
  86. {
  87. SceneObject so = Selection.SceneObject;
  88. if (so == null)
  89. return;
  90. UndoRedo.RecordSO(so, false, "Added a GUIWidget component");
  91. so.AddComponent<GUIWidget>();
  92. EditorApplication.SetSceneDirty();
  93. }
  94. /// <summary>
  95. /// Adds a BoxCollider component to the currently selected scene object.
  96. /// </summary>
  97. [MenuItem("Components/Physics/Box collider", 7044)]
  98. private static void AddBoxCollider()
  99. {
  100. SceneObject so = Selection.SceneObject;
  101. if (so == null)
  102. {
  103. so = UndoRedo.CreateSO("BoxCollider", "New scene object");
  104. Selection.SceneObject = so;
  105. }
  106. UndoRedo.RecordSO(so, false, "Added a BoxCollider component");
  107. so.AddComponent<BoxCollider>();
  108. EditorApplication.SetSceneDirty();
  109. }
  110. /// <summary>
  111. /// Adds a SphereCollider component to the currently selected scene object.
  112. /// </summary>
  113. [MenuItem("Components/Physics/Sphere collider", 7043)]
  114. private static void AddSphereCollider()
  115. {
  116. SceneObject so = Selection.SceneObject;
  117. if (so == null)
  118. {
  119. so = UndoRedo.CreateSO("SphereCollider", "New scene object");
  120. Selection.SceneObject = so;
  121. }
  122. UndoRedo.RecordSO(so, false, "Added a SphereCollider component");
  123. so.AddComponent<SphereCollider>();
  124. EditorApplication.SetSceneDirty();
  125. }
  126. /// <summary>
  127. /// Adds a CapsuleCollider component to the currently selected scene object.
  128. /// </summary>
  129. [MenuItem("Components/Physics/Capsule collider", 7042)]
  130. private static void AddCapsuleCollider()
  131. {
  132. SceneObject so = Selection.SceneObject;
  133. if (so == null)
  134. {
  135. so = UndoRedo.CreateSO("CapsuleCollider", "New scene object");
  136. Selection.SceneObject = so;
  137. }
  138. UndoRedo.RecordSO(so, false, "Added a CapsuleCollider component");
  139. so.AddComponent<CapsuleCollider>();
  140. EditorApplication.SetSceneDirty();
  141. }
  142. /// <summary>
  143. /// Adds a MeshCollider component to the currently selected scene object.
  144. /// </summary>
  145. [MenuItem("Components/Physics/Mesh collider", 7041)]
  146. private static void AddMeshCollider()
  147. {
  148. SceneObject so = Selection.SceneObject;
  149. if (so == null)
  150. {
  151. so = UndoRedo.CreateSO("MeshCollider", "New scene object");
  152. Selection.SceneObject = so;
  153. }
  154. UndoRedo.RecordSO(so, false, "Added a MeshCollider component");
  155. so.AddComponent<MeshCollider>();
  156. EditorApplication.SetSceneDirty();
  157. }
  158. /// <summary>
  159. /// Adds a PlaneCollider component to the currently selected scene object.
  160. /// </summary>
  161. [MenuItem("Components/Physics/Plane collider", 7040)]
  162. private static void AddPlaneCollider()
  163. {
  164. SceneObject so = Selection.SceneObject;
  165. if (so == null)
  166. {
  167. so = UndoRedo.CreateSO("PlaneCollider", "New scene object");
  168. Selection.SceneObject = so;
  169. }
  170. UndoRedo.RecordSO(so, false, "Added a PlaneCollider component");
  171. so.AddComponent<PlaneCollider>();
  172. EditorApplication.SetSceneDirty();
  173. }
  174. /// <summary>
  175. /// Adds a Rigidbody component to the currently selected scene object.
  176. /// </summary>
  177. [MenuItem("Components/Physics/Rigidbody", 7039, true)]
  178. private static void AddRigidbody()
  179. {
  180. SceneObject so = Selection.SceneObject;
  181. if (so == null)
  182. {
  183. so = UndoRedo.CreateSO("Rigidbody", "New scene object");
  184. Selection.SceneObject = so;
  185. }
  186. UndoRedo.RecordSO(so, false, "Added a Rigidbody component");
  187. so.AddComponent<Rigidbody>();
  188. EditorApplication.SetSceneDirty();
  189. }
  190. /// <summary>
  191. /// Adds a CharacterController component to the currently selected scene object.
  192. /// </summary>
  193. [MenuItem("Components/Physics/Character controller", 7038)]
  194. private static void AddCharacterController()
  195. {
  196. SceneObject so = Selection.SceneObject;
  197. if (so == null)
  198. {
  199. so = UndoRedo.CreateSO("CharacterController", "New scene object");
  200. Selection.SceneObject = so;
  201. }
  202. UndoRedo.RecordSO(so, false, "Added a CharacterController component");
  203. so.AddComponent<CharacterController>();
  204. EditorApplication.SetSceneDirty();
  205. }
  206. /// <summary>
  207. /// Adds a FixedJoint component to the currently selected scene object.
  208. /// </summary>
  209. [MenuItem("Components/Physics/Fixed joint", 7037, true)]
  210. private static void AddFixedJoint()
  211. {
  212. SceneObject so = Selection.SceneObject;
  213. if (so == null)
  214. {
  215. so = UndoRedo.CreateSO("FixedJoint", "New scene object");
  216. Selection.SceneObject = so;
  217. }
  218. UndoRedo.RecordSO(so, false, "Added a FixedJoint component");
  219. so.AddComponent<FixedJoint>();
  220. EditorApplication.SetSceneDirty();
  221. }
  222. /// <summary>
  223. /// Adds a DistanceJoint component to the currently selected scene object.
  224. /// </summary>
  225. [MenuItem("Components/Physics/Distance joint", 7036)]
  226. private static void AddDistanceJoint()
  227. {
  228. SceneObject so = Selection.SceneObject;
  229. if (so == null)
  230. {
  231. so = UndoRedo.CreateSO("DistanceJoint", "New scene object");
  232. Selection.SceneObject = so;
  233. }
  234. UndoRedo.RecordSO(so, false, "Added a DistanceJoint component");
  235. so.AddComponent<DistanceJoint>();
  236. EditorApplication.SetSceneDirty();
  237. }
  238. /// <summary>
  239. /// Adds a HingeJoint component to the currently selected scene object.
  240. /// </summary>
  241. [MenuItem("Components/Physics/Hinge joint", 7035)]
  242. private static void AddHingeJoint()
  243. {
  244. SceneObject so = Selection.SceneObject;
  245. if (so == null)
  246. {
  247. so = UndoRedo.CreateSO("HingeJoint", "New scene object");
  248. Selection.SceneObject = so;
  249. }
  250. UndoRedo.RecordSO(so, false, "Added a HingeJoint component");
  251. so.AddComponent<HingeJoint>();
  252. EditorApplication.SetSceneDirty();
  253. }
  254. /// <summary>
  255. /// Adds a SphericalJoint component to the currently selected scene object.
  256. /// </summary>
  257. [MenuItem("Components/Physics/Spherical joint", 7034)]
  258. private static void AddSphericalJoint()
  259. {
  260. SceneObject so = Selection.SceneObject;
  261. if (so == null)
  262. {
  263. so = UndoRedo.CreateSO("SphericalJoint", "New scene object");
  264. Selection.SceneObject = so;
  265. }
  266. UndoRedo.RecordSO(so, false, "Added a SphericalJoint component");
  267. so.AddComponent<SphericalJoint>();
  268. EditorApplication.SetSceneDirty();
  269. }
  270. /// <summary>
  271. /// Adds a SliderJoint component to the currently selected scene object.
  272. /// </summary>
  273. [MenuItem("Components/Physics/Slider joint", 7032)]
  274. private static void AddSliderJoint()
  275. {
  276. SceneObject so = Selection.SceneObject;
  277. if (so == null)
  278. {
  279. so = UndoRedo.CreateSO("SliderJoint", "New scene object");
  280. Selection.SceneObject = so;
  281. }
  282. UndoRedo.RecordSO(so, false, "Added a SliderJoint component");
  283. so.AddComponent<SliderJoint>();
  284. EditorApplication.SetSceneDirty();
  285. }
  286. /// <summary>
  287. /// Adds a D6Joint component to the currently selected scene object.
  288. /// </summary>
  289. [MenuItem("Components/Physics/D6 joint", 7032)]
  290. private static void AddD6Joint()
  291. {
  292. SceneObject so = Selection.SceneObject;
  293. if (so == null)
  294. {
  295. so = UndoRedo.CreateSO("D6Joint", "New scene object");
  296. Selection.SceneObject = so;
  297. }
  298. UndoRedo.RecordSO(so, false, "Added a D6Joint component");
  299. so.AddComponent<D6Joint>();
  300. EditorApplication.SetSceneDirty();
  301. }
  302. /// <summary>
  303. /// Creates a new empty scene object.
  304. /// </summary>
  305. [MenuItem("Scene Objects/Scene Object", 8051)]
  306. [ToolbarItem("SceneObject", ToolbarIcon.NewSceneObject, "Creates a new empty scene object", 1601, true)]
  307. private static void AddEmptySO()
  308. {
  309. SceneObject so = UndoRedo.CreateSO("SceneObject", "New scene object");
  310. Selection.SceneObject = so;
  311. EditorApplication.SetSceneDirty();
  312. }
  313. /// <summary>
  314. /// Creates a new scene object with a camera component.
  315. /// </summary>
  316. [MenuItem("Scene Objects/Camera", 8050)]
  317. [ToolbarItem("Camera", ToolbarIcon.NewCamera, "New camera", 1600, false)]
  318. private static void AddCameraSO()
  319. {
  320. SceneObject so = UndoRedo.CreateSO("Camera", "Created a Camera");
  321. Camera cam = so.AddComponent<Camera>();
  322. cam.Main = true;
  323. Selection.SceneObject = so;
  324. EditorApplication.SetSceneDirty();
  325. }
  326. /// <summary>
  327. /// Creates a new scene object with a renderable component.
  328. /// </summary>
  329. [MenuItem("Scene Objects/Renderable", 8049)]
  330. [ToolbarItem("Renderable", ToolbarIcon.NewRenderable, "New renderable", 1599)]
  331. private static void AddRenderableSO()
  332. {
  333. SceneObject so = UndoRedo.CreateSO("Renderable", "Created a Renderable");
  334. so.AddComponent<Renderable>();
  335. Selection.SceneObject = so;
  336. EditorApplication.SetSceneDirty();
  337. }
  338. /// <summary>
  339. /// Creates a new scene object with a point light component.
  340. /// </summary>
  341. [MenuItem("Scene Objects/Point light", 8048)]
  342. [ToolbarItem("Point light", ToolbarIcon.NewPointLight, "New point light", 1598)]
  343. private static void AddPointLightSO()
  344. {
  345. SceneObject so = UndoRedo.CreateSO("Point light", "Created a Light");
  346. Light light = so.AddComponent<Light>();
  347. light.Type = LightType.Point;
  348. Selection.SceneObject = so;
  349. EditorApplication.SetSceneDirty();
  350. }
  351. /// <summary>
  352. /// Creates a new scene object with a spot light component.
  353. /// </summary>
  354. [MenuItem("Scene Objects/Spot light", 8047)]
  355. [ToolbarItem("Spot light", ToolbarIcon.NewSpotLight, "New spot light", 1597)]
  356. private static void AddSpotLightSO()
  357. {
  358. SceneObject so = UndoRedo.CreateSO("Spot light", "Created a Light");
  359. Light light = so.AddComponent<Light>();
  360. light.Type = LightType.Spot;
  361. Selection.SceneObject = so;
  362. EditorApplication.SetSceneDirty();
  363. }
  364. /// <summary>
  365. /// Creates a new scene object with a directional light component.
  366. /// </summary>
  367. [MenuItem("Scene Objects/Directional light", 8046)]
  368. [ToolbarItem("Directional light", ToolbarIcon.NewDirLight, "New directional light", 1596)]
  369. private static void AddDirectionalLightSO()
  370. {
  371. SceneObject so = UndoRedo.CreateSO("Directional light", "Created a Light");
  372. Light light = so.AddComponent<Light>();
  373. light.Type = LightType.Directional;
  374. Selection.SceneObject = so;
  375. EditorApplication.SetSceneDirty();
  376. }
  377. /// <summary>
  378. /// Creates a new scene object with a GUI widget component.
  379. /// </summary>
  380. [MenuItem("Scene Objects/GUI widget", 8045)]
  381. private static void AddGUIWidgetSO()
  382. {
  383. SceneObject so = UndoRedo.CreateSO("GUIWidget", "Created a GUIWidget");
  384. so.AddComponent<GUIWidget>();
  385. Selection.SceneObject = so;
  386. EditorApplication.SetSceneDirty();
  387. }
  388. /// <summary>
  389. /// Creates a new scene object with a box primitive.
  390. /// </summary>
  391. [MenuItem("Scene Objects/3D primitives/Box", 8100)]
  392. [ToolbarItem("Cube", ToolbarIcon.NewCube, "Creates a scene object with a box primitive", 1700, true)]
  393. private static void Add3DBox()
  394. {
  395. SceneObject so = UndoRedo.CreateSO("Box", "Created a box");
  396. Renderable renderable = so.AddComponent<Renderable>();
  397. renderable.Mesh = Builtin.Box;
  398. Selection.SceneObject = so;
  399. EditorApplication.SetSceneDirty();
  400. }
  401. /// <summary>
  402. /// Creates a new scene object with a sphere primitive.
  403. /// </summary>
  404. [MenuItem("Scene Objects/3D primitives/Sphere", 8099)]
  405. [ToolbarItem("Sphere", ToolbarIcon.NewSphere, "Creates a scene object with a sphere primitive", 1699)]
  406. private static void Add3DSphere()
  407. {
  408. SceneObject so = UndoRedo.CreateSO("Sphere", "Created a sphere");
  409. Renderable renderable = so.AddComponent<Renderable>();
  410. renderable.Mesh = Builtin.Sphere;
  411. Selection.SceneObject = so;
  412. EditorApplication.SetSceneDirty();
  413. }
  414. /// <summary>
  415. /// Creates a new scene object with a cone primitive.
  416. /// </summary>
  417. [MenuItem("Scene Objects/3D primitives/Cone", 8098)]
  418. [ToolbarItem("Cone", ToolbarIcon.NewCone, "Creates a scene object with a cone primitive", 1698)]
  419. private static void Add3DCone()
  420. {
  421. SceneObject so = UndoRedo.CreateSO("Cone", "Created a cone");
  422. Renderable renderable = so.AddComponent<Renderable>();
  423. renderable.Mesh = Builtin.Cone;
  424. Selection.SceneObject = so;
  425. EditorApplication.SetSceneDirty();
  426. }
  427. /// <summary>
  428. /// Creates a new scene object with a quad primitive.
  429. /// </summary>
  430. [MenuItem("Scene Objects/3D primitives/Quad", 8097)]
  431. [ToolbarItem("Quad", ToolbarIcon.NewQuad, "Creates a scene object with a quad primitive", 1697)]
  432. private static void Add3DQuad()
  433. {
  434. SceneObject so = UndoRedo.CreateSO("Quad", "Created a quad");
  435. Renderable renderable = so.AddComponent<Renderable>();
  436. renderable.Mesh = Builtin.Quad;
  437. Selection.SceneObject = so;
  438. EditorApplication.SetSceneDirty();
  439. }
  440. /// <summary>
  441. /// Creates a new scene object with a disc primitive.
  442. /// </summary>
  443. [MenuItem("Scene Objects/3D primitives/Disc", 8096)]
  444. private static void Add3DDisc()
  445. {
  446. SceneObject so = UndoRedo.CreateSO("Disc", "Created a disc");
  447. Renderable renderable = so.AddComponent<Renderable>();
  448. renderable.Mesh = Builtin.Disc;
  449. Selection.SceneObject = so;
  450. EditorApplication.SetSceneDirty();
  451. }
  452. /// <summary>
  453. /// Applies changes from the prefab instance to the prefab resource.
  454. /// </summary>
  455. [MenuItem("Scene Objects/Apply prefab", 8025, true)]
  456. private static void ApplyPrefab()
  457. {
  458. SceneObject so = Selection.SceneObject;
  459. if (so == null)
  460. return;
  461. PrefabUtility.ApplyPrefab(so);
  462. }
  463. /// <summary>
  464. /// Reverts a prefab instance to the original state of its prefab.
  465. /// </summary>
  466. [MenuItem("Scene Objects/Revert to prefab", 8024)]
  467. private static void RevertToPrefab()
  468. {
  469. SceneObject so = Selection.SceneObject;
  470. if (so == null)
  471. return;
  472. UndoRedo.RecordSO(so, true, "Reverting \"" + so.Name + "\" to prefab.");
  473. PrefabUtility.RevertPrefab(so);
  474. EditorApplication.SetSceneDirty();
  475. }
  476. /// <summary>
  477. /// Breaks a link between a prefab and its instance.
  478. /// </summary>
  479. [MenuItem("Scene Objects/Break prefab link", 8023)]
  480. private static void BreakPrefabLink()
  481. {
  482. SceneObject so = Selection.SceneObject;
  483. if (so == null)
  484. return;
  485. UndoRedo.BreakPrefab(so, "Breaking prefab link for " + so.Name);
  486. EditorApplication.SetSceneDirty();
  487. }
  488. /// <summary>
  489. /// Cuts the currently selected scene object or resource.
  490. /// </summary>
  491. [MenuItem("Edit/Cut", 9450, true)]
  492. public static void Cut()
  493. {
  494. EditorApplication.TriggerGlobalShortcut(EditorApplication.CutKey);
  495. }
  496. /// <summary>
  497. /// Copies the currently selected scene object or resource.
  498. /// </summary>
  499. [MenuItem("Edit/Copy", 9449)]
  500. public static void Copy()
  501. {
  502. EditorApplication.TriggerGlobalShortcut(EditorApplication.CopyKey);
  503. }
  504. /// <summary>
  505. /// Pastes the scene objects or resources that were previously cut or copied.
  506. /// </summary>
  507. [MenuItem("Edit/Paste", 9448)]
  508. public static void Paste()
  509. {
  510. EditorApplication.TriggerGlobalShortcut(EditorApplication.PasteKey);
  511. }
  512. /// <summary>
  513. /// Deletes currently selected scene objects or resources.
  514. /// </summary>
  515. [MenuItem("Edit/Delete", 9447)]
  516. public static void Delete()
  517. {
  518. EditorApplication.TriggerGlobalShortcut(EditorApplication.DeleteKey);
  519. }
  520. /// <summary>
  521. /// Duplicates currently selected scene objects or resources.
  522. /// </summary>
  523. [MenuItem("Edit/Duplicate", 9446)]
  524. public static void Duplicate()
  525. {
  526. EditorApplication.TriggerGlobalShortcut(EditorApplication.DuplicateKey);
  527. }
  528. }
  529. }