MenuItems.cs 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889
  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. /** @addtogroup Window
  8. * @{
  9. */
  10. /// <summary>
  11. /// Contains various menu item callbacks for the main editor menu bar.
  12. /// </summary>
  13. static class MenuItems
  14. {
  15. /// <summary>
  16. /// Adds a camera component to the currently selected scene object.
  17. /// </summary>
  18. [MenuItem("Components/Camera", 7950)]
  19. private static void AddCamera()
  20. {
  21. SceneObject so = Selection.SceneObject;
  22. if (so == null)
  23. return;
  24. UndoRedo.RecordSO(so, false, "Added a Camera component");
  25. Camera cam = so.AddComponent<Camera>();
  26. cam.Main = true;
  27. EditorApplication.SetSceneDirty();
  28. }
  29. /// <summary>
  30. /// Adds a renderable component to the currently selected scene object.
  31. /// </summary>
  32. [MenuItem("Components/Renderable", 7949)]
  33. private static void AddRenderable()
  34. {
  35. SceneObject so = Selection.SceneObject;
  36. if (so == null)
  37. return;
  38. UndoRedo.RecordSO(so, false, "Added a Renderable component");
  39. so.AddComponent<Renderable>();
  40. EditorApplication.SetSceneDirty();
  41. }
  42. /// <summary>
  43. /// Adds a ParticleSystem component to the currently selected scene object.
  44. /// </summary>
  45. [MenuItem("Components/Particle system", 7948)]
  46. private static void AddParticleSystem()
  47. {
  48. SceneObject so = Selection.SceneObject;
  49. if (so == null)
  50. return;
  51. UndoRedo.RecordSO(so, false, "Added a Particle System component");
  52. so.AddComponent<ParticleSystem>();
  53. EditorApplication.SetSceneDirty();
  54. }
  55. /// <summary>
  56. /// Adds a Decal component to the currently selected scene object.
  57. /// </summary>
  58. [MenuItem("Components/Decal", 7947)]
  59. private static void AddDecal()
  60. {
  61. SceneObject so = Selection.SceneObject;
  62. if (so == null)
  63. return;
  64. UndoRedo.RecordSO(so, false, "Added a Decal component");
  65. so.AddComponent<Decal>();
  66. EditorApplication.SetSceneDirty();
  67. }
  68. /// <summary>
  69. /// Adds a point light component to the currently selected scene object.
  70. /// </summary>
  71. [MenuItem("Components/Radial light", 7900, true)]
  72. private static void AddPointLight()
  73. {
  74. SceneObject so = Selection.SceneObject;
  75. if (so == null)
  76. return;
  77. UndoRedo.RecordSO(so, false, "Added a Light component");
  78. Light light = so.AddComponent<Light>();
  79. light.Type = LightType.Radial;
  80. EditorApplication.SetSceneDirty();
  81. }
  82. /// <summary>
  83. /// Adds a spot light component to the currently selected scene object.
  84. /// </summary>
  85. [MenuItem("Components/Spot light", 7899)]
  86. private static void AddSpotLight()
  87. {
  88. SceneObject so = Selection.SceneObject;
  89. if (so == null)
  90. return;
  91. UndoRedo.RecordSO(so, false, "Added a Light component");
  92. Light light = so.AddComponent<Light>();
  93. light.Type = LightType.Spot;
  94. EditorApplication.SetSceneDirty();
  95. }
  96. /// <summary>
  97. /// Adds a directional light component to the currently selected scene object.
  98. /// </summary>
  99. [MenuItem("Components/Directional light", 7898)]
  100. private static void AddDirectionalLight()
  101. {
  102. SceneObject so = Selection.SceneObject;
  103. if (so == null)
  104. return;
  105. UndoRedo.RecordSO(so, false, "Added a Light component");
  106. Light light = so.AddComponent<Light>();
  107. light.Type = LightType.Directional;
  108. EditorApplication.SetSceneDirty();
  109. }
  110. /// <summary>
  111. /// Adds a Skybox component to the currently selected scene object.
  112. /// </summary>
  113. [MenuItem("Components/Skybox", 7897)]
  114. private static void AddSkybox()
  115. {
  116. SceneObject so = Selection.SceneObject;
  117. if (so == null)
  118. return;
  119. UndoRedo.RecordSO(so, false, "Added an Skybox component");
  120. so.AddComponent<Skybox>();
  121. EditorApplication.SetSceneDirty();
  122. }
  123. /// <summary>
  124. /// Adds a ReflectionProbe component to the currently selected scene object.
  125. /// </summary>
  126. [MenuItem("Components/Reflection probe", 7896)]
  127. private static void AddReflectionProbe()
  128. {
  129. SceneObject so = Selection.SceneObject;
  130. if (so == null)
  131. return;
  132. UndoRedo.RecordSO(so, false, "Added an ReflectionProbe component");
  133. so.AddComponent<ReflectionProbe>();
  134. EditorApplication.SetSceneDirty();
  135. }
  136. /// <summary>
  137. /// Adds a LightProbeVolume component to the currently selected scene object.
  138. /// </summary>
  139. [MenuItem("Components/Light probe volume", 7895)]
  140. private static void AddLightProbeVolume()
  141. {
  142. SceneObject so = Selection.SceneObject;
  143. if (so == null)
  144. return;
  145. UndoRedo.RecordSO(so, false, "Added a Light Probe Volume component");
  146. so.AddComponent<LightProbeVolume>();
  147. EditorApplication.SetSceneDirty();
  148. }
  149. /// <summary>
  150. /// Adds a GUI widget component to the currently selected scene object.
  151. /// </summary>
  152. [MenuItem("Components/GUI widget", 7850, true)]
  153. private static void AddGUIWidget()
  154. {
  155. SceneObject so = Selection.SceneObject;
  156. if (so == null)
  157. return;
  158. UndoRedo.RecordSO(so, false, "Added a GUIWidget component");
  159. so.AddComponent<GUIWidget>();
  160. EditorApplication.SetSceneDirty();
  161. }
  162. /// <summary>
  163. /// Adds a BoxCollider component to the currently selected scene object.
  164. /// </summary>
  165. [MenuItem("Components/Physics/Box collider", 7800, true)]
  166. private static void AddBoxCollider()
  167. {
  168. SceneObject so = Selection.SceneObject;
  169. if (so == null)
  170. {
  171. so = UndoRedo.CreateSO("BoxCollider", "New scene object");
  172. Selection.SceneObject = so;
  173. FocusOnHierarchyOrScene();
  174. }
  175. UndoRedo.RecordSO(so, false, "Added a BoxCollider component");
  176. so.AddComponent<BoxCollider>();
  177. EditorApplication.SetSceneDirty();
  178. }
  179. /// <summary>
  180. /// Adds a SphereCollider component to the currently selected scene object.
  181. /// </summary>
  182. [MenuItem("Components/Physics/Sphere collider", 7799)]
  183. private static void AddSphereCollider()
  184. {
  185. SceneObject so = Selection.SceneObject;
  186. if (so == null)
  187. {
  188. so = UndoRedo.CreateSO("SphereCollider", "New scene object");
  189. Selection.SceneObject = so;
  190. FocusOnHierarchyOrScene();
  191. }
  192. UndoRedo.RecordSO(so, false, "Added a SphereCollider component");
  193. so.AddComponent<SphereCollider>();
  194. EditorApplication.SetSceneDirty();
  195. }
  196. /// <summary>
  197. /// Adds a CapsuleCollider component to the currently selected scene object.
  198. /// </summary>
  199. [MenuItem("Components/Physics/Capsule collider", 7798)]
  200. private static void AddCapsuleCollider()
  201. {
  202. SceneObject so = Selection.SceneObject;
  203. if (so == null)
  204. {
  205. so = UndoRedo.CreateSO("CapsuleCollider", "New scene object");
  206. Selection.SceneObject = so;
  207. FocusOnHierarchyOrScene();
  208. }
  209. UndoRedo.RecordSO(so, false, "Added a CapsuleCollider component");
  210. so.AddComponent<CapsuleCollider>();
  211. EditorApplication.SetSceneDirty();
  212. }
  213. /// <summary>
  214. /// Adds a MeshCollider component to the currently selected scene object.
  215. /// </summary>
  216. [MenuItem("Components/Physics/Mesh collider", 7797)]
  217. private static void AddMeshCollider()
  218. {
  219. SceneObject so = Selection.SceneObject;
  220. if (so == null)
  221. {
  222. so = UndoRedo.CreateSO("MeshCollider", "New scene object");
  223. Selection.SceneObject = so;
  224. FocusOnHierarchyOrScene();
  225. }
  226. UndoRedo.RecordSO(so, false, "Added a MeshCollider component");
  227. so.AddComponent<MeshCollider>();
  228. EditorApplication.SetSceneDirty();
  229. }
  230. /// <summary>
  231. /// Adds a PlaneCollider component to the currently selected scene object.
  232. /// </summary>
  233. [MenuItem("Components/Physics/Plane collider", 7796)]
  234. private static void AddPlaneCollider()
  235. {
  236. SceneObject so = Selection.SceneObject;
  237. if (so == null)
  238. {
  239. so = UndoRedo.CreateSO("PlaneCollider", "New scene object");
  240. Selection.SceneObject = so;
  241. FocusOnHierarchyOrScene();
  242. }
  243. UndoRedo.RecordSO(so, false, "Added a PlaneCollider component");
  244. so.AddComponent<PlaneCollider>();
  245. EditorApplication.SetSceneDirty();
  246. }
  247. /// <summary>
  248. /// Adds a Rigidbody component to the currently selected scene object.
  249. /// </summary>
  250. [MenuItem("Components/Physics/Rigidbody", 7750, true)]
  251. private static void AddRigidbody()
  252. {
  253. SceneObject so = Selection.SceneObject;
  254. if (so == null)
  255. {
  256. so = UndoRedo.CreateSO("Rigidbody", "New scene object");
  257. Selection.SceneObject = so;
  258. FocusOnHierarchyOrScene();
  259. }
  260. UndoRedo.RecordSO(so, false, "Added a Rigidbody component");
  261. so.AddComponent<Rigidbody>();
  262. EditorApplication.SetSceneDirty();
  263. }
  264. /// <summary>
  265. /// Adds a CharacterController component to the currently selected scene object.
  266. /// </summary>
  267. [MenuItem("Components/Physics/Character controller", 7749)]
  268. private static void AddCharacterController()
  269. {
  270. SceneObject so = Selection.SceneObject;
  271. if (so == null)
  272. {
  273. so = UndoRedo.CreateSO("CharacterController", "New scene object");
  274. Selection.SceneObject = so;
  275. FocusOnHierarchyOrScene();
  276. }
  277. UndoRedo.RecordSO(so, false, "Added a CharacterController component");
  278. so.AddComponent<CharacterController>();
  279. EditorApplication.SetSceneDirty();
  280. }
  281. /// <summary>
  282. /// Adds a FixedJoint component to the currently selected scene object.
  283. /// </summary>
  284. [MenuItem("Components/Physics/Fixed joint", 7600, true)]
  285. private static void AddFixedJoint()
  286. {
  287. SceneObject so = Selection.SceneObject;
  288. if (so == null)
  289. {
  290. so = UndoRedo.CreateSO("FixedJoint", "New scene object");
  291. Selection.SceneObject = so;
  292. FocusOnHierarchyOrScene();
  293. }
  294. UndoRedo.RecordSO(so, false, "Added a FixedJoint component");
  295. so.AddComponent<FixedJoint>();
  296. EditorApplication.SetSceneDirty();
  297. }
  298. /// <summary>
  299. /// Adds a DistanceJoint component to the currently selected scene object.
  300. /// </summary>
  301. [MenuItem("Components/Physics/Distance joint", 7599)]
  302. private static void AddDistanceJoint()
  303. {
  304. SceneObject so = Selection.SceneObject;
  305. if (so == null)
  306. {
  307. so = UndoRedo.CreateSO("DistanceJoint", "New scene object");
  308. Selection.SceneObject = so;
  309. FocusOnHierarchyOrScene();
  310. }
  311. UndoRedo.RecordSO(so, false, "Added a DistanceJoint component");
  312. so.AddComponent<DistanceJoint>();
  313. EditorApplication.SetSceneDirty();
  314. }
  315. /// <summary>
  316. /// Adds a HingeJoint component to the currently selected scene object.
  317. /// </summary>
  318. [MenuItem("Components/Physics/Hinge joint", 7598)]
  319. private static void AddHingeJoint()
  320. {
  321. SceneObject so = Selection.SceneObject;
  322. if (so == null)
  323. {
  324. so = UndoRedo.CreateSO("HingeJoint", "New scene object");
  325. Selection.SceneObject = so;
  326. FocusOnHierarchyOrScene();
  327. }
  328. UndoRedo.RecordSO(so, false, "Added a HingeJoint component");
  329. so.AddComponent<HingeJoint>();
  330. EditorApplication.SetSceneDirty();
  331. }
  332. /// <summary>
  333. /// Adds a SphericalJoint component to the currently selected scene object.
  334. /// </summary>
  335. [MenuItem("Components/Physics/Spherical joint", 7597)]
  336. private static void AddSphericalJoint()
  337. {
  338. SceneObject so = Selection.SceneObject;
  339. if (so == null)
  340. {
  341. so = UndoRedo.CreateSO("SphericalJoint", "New scene object");
  342. Selection.SceneObject = so;
  343. FocusOnHierarchyOrScene();
  344. }
  345. UndoRedo.RecordSO(so, false, "Added a SphericalJoint component");
  346. so.AddComponent<SphericalJoint>();
  347. EditorApplication.SetSceneDirty();
  348. }
  349. /// <summary>
  350. /// Adds a SliderJoint component to the currently selected scene object.
  351. /// </summary>
  352. [MenuItem("Components/Physics/Slider joint", 7596)]
  353. private static void AddSliderJoint()
  354. {
  355. SceneObject so = Selection.SceneObject;
  356. if (so == null)
  357. {
  358. so = UndoRedo.CreateSO("SliderJoint", "New scene object");
  359. Selection.SceneObject = so;
  360. FocusOnHierarchyOrScene();
  361. }
  362. UndoRedo.RecordSO(so, false, "Added a SliderJoint component");
  363. so.AddComponent<SliderJoint>();
  364. EditorApplication.SetSceneDirty();
  365. }
  366. /// <summary>
  367. /// Adds a D6Joint component to the currently selected scene object.
  368. /// </summary>
  369. [MenuItem("Components/Physics/D6 joint", 7595)]
  370. private static void AddD6Joint()
  371. {
  372. SceneObject so = Selection.SceneObject;
  373. if (so == null)
  374. {
  375. so = UndoRedo.CreateSO("D6Joint", "New scene object");
  376. Selection.SceneObject = so;
  377. FocusOnHierarchyOrScene();
  378. }
  379. UndoRedo.RecordSO(so, false, "Added a D6Joint component");
  380. so.AddComponent<D6Joint>();
  381. EditorApplication.SetSceneDirty();
  382. }
  383. /// <summary>
  384. /// Adds an AudioListener component to the currently selected scene object.
  385. /// </summary>
  386. [MenuItem("Components/Audio/Listener", 7550, true)]
  387. private static void AddAudioListener()
  388. {
  389. SceneObject so = Selection.SceneObject;
  390. if (so == null)
  391. {
  392. so = UndoRedo.CreateSO("AudioListener", "New scene object");
  393. Selection.SceneObject = so;
  394. FocusOnHierarchyOrScene();
  395. }
  396. UndoRedo.RecordSO(so, false, "Added a AudioListener component");
  397. so.AddComponent<AudioListener>();
  398. EditorApplication.SetSceneDirty();
  399. }
  400. /// <summary>
  401. /// Adds an AudioSource component to the currently selected scene object.
  402. /// </summary>
  403. [MenuItem("Components/Audio/Source", 7549)]
  404. private static void AddAudioSource()
  405. {
  406. SceneObject so = Selection.SceneObject;
  407. if (so == null)
  408. {
  409. so = UndoRedo.CreateSO("AudioSource", "New scene object");
  410. Selection.SceneObject = so;
  411. FocusOnHierarchyOrScene();
  412. }
  413. UndoRedo.RecordSO(so, false, "Added a AudioSource component");
  414. so.AddComponent<AudioSource>();
  415. EditorApplication.SetSceneDirty();
  416. }
  417. /// <summary>
  418. /// Adds an Animation component to the currently selected scene object.
  419. /// </summary>
  420. [MenuItem("Components/Animation", 7500, true)]
  421. private static void AddAnimation()
  422. {
  423. SceneObject so = Selection.SceneObject;
  424. if (so == null)
  425. return;
  426. UndoRedo.RecordSO(so, false, "Added an Animation component");
  427. so.AddComponent<Animation>();
  428. EditorApplication.SetSceneDirty();
  429. }
  430. /// <summary>
  431. /// Adds a Bone component to the currently selected scene object.
  432. /// </summary>
  433. [MenuItem("Components/Bone", 7499)]
  434. private static void AddBone()
  435. {
  436. SceneObject so = Selection.SceneObject;
  437. if (so == null)
  438. return;
  439. UndoRedo.RecordSO(so, false, "Added an Bone component");
  440. so.AddComponent<Bone>();
  441. EditorApplication.SetSceneDirty();
  442. }
  443. /// <summary>
  444. /// Creates a new empty scene object.
  445. /// </summary>
  446. [MenuItem("Scene Objects/Scene Object", 9000)]
  447. [ToolbarItem("SceneObject", ToolbarIcon.NewSceneObject, "Creates a new empty scene object", 1601, true)]
  448. private static void AddEmptySO()
  449. {
  450. SceneObject so = UndoRedo.CreateSO("SceneObject", "New scene object");
  451. Selection.SceneObject = so;
  452. FocusOnHierarchyOrScene();
  453. EditorApplication.SetSceneDirty();
  454. }
  455. /// <summary>
  456. /// Creates a new scene object with a Camera component.
  457. /// </summary>
  458. [MenuItem("Scene Objects/Camera", 8950, true)]
  459. [ToolbarItem("Camera", ToolbarIcon.NewCamera, "New camera", 1600, false)]
  460. private static void AddCameraSO()
  461. {
  462. SceneObject so = UndoRedo.CreateSO("Camera", "Created a Camera");
  463. Camera cam = so.AddComponent<Camera>();
  464. cam.Main = true;
  465. Selection.SceneObject = so;
  466. FocusOnHierarchyOrScene();
  467. EditorApplication.SetSceneDirty();
  468. }
  469. /// <summary>
  470. /// Creates a new scene object with a Renderable component.
  471. /// </summary>
  472. [MenuItem("Scene Objects/Renderable", 8949)]
  473. [ToolbarItem("Renderable", ToolbarIcon.NewRenderable, "New renderable", 1599)]
  474. private static void AddRenderableSO()
  475. {
  476. SceneObject so = UndoRedo.CreateSO("Renderable", "Created a Renderable");
  477. so.AddComponent<Renderable>();
  478. Selection.SceneObject = so;
  479. FocusOnHierarchyOrScene();
  480. EditorApplication.SetSceneDirty();
  481. }
  482. /// <summary>
  483. /// Creates a new scene object with a Particle System component.
  484. /// </summary>
  485. [MenuItem("Scene Objects/Particle system", 8948)]
  486. private static void AddParticleSystemSO()
  487. {
  488. SceneObject so = UndoRedo.CreateSO("Particle system", "Created a ParticleSystem");
  489. so.AddComponent<ParticleSystem>();
  490. Selection.SceneObject = so;
  491. FocusOnHierarchyOrScene();
  492. EditorApplication.SetSceneDirty();
  493. }
  494. /// <summary>
  495. /// Creates a new scene object with a Decal component.
  496. /// </summary>
  497. [MenuItem("Scene Objects/Decal", 8947)]
  498. private static void AddDecalSO()
  499. {
  500. SceneObject so = UndoRedo.CreateSO("Decal", "Created a Decal");
  501. so.AddComponent<Decal>();
  502. Selection.SceneObject = so;
  503. FocusOnHierarchyOrScene();
  504. EditorApplication.SetSceneDirty();
  505. }
  506. /// <summary>
  507. /// Creates a new scene object with a radial light component.
  508. /// </summary>
  509. [MenuItem("Scene Objects/Radial light", 8900, true)]
  510. [ToolbarItem("Point light", ToolbarIcon.NewPointLight, "New radial light", 1598)]
  511. private static void AddPointLightSO()
  512. {
  513. SceneObject so = UndoRedo.CreateSO("Radial light", "Created a Light");
  514. Light light = so.AddComponent<Light>();
  515. light.Type = LightType.Radial;
  516. Selection.SceneObject = so;
  517. FocusOnHierarchyOrScene();
  518. EditorApplication.SetSceneDirty();
  519. }
  520. /// <summary>
  521. /// Creates a new scene object with a spot light component.
  522. /// </summary>
  523. [MenuItem("Scene Objects/Spot light", 8899)]
  524. [ToolbarItem("Spot light", ToolbarIcon.NewSpotLight, "New spot light", 1597)]
  525. private static void AddSpotLightSO()
  526. {
  527. SceneObject so = UndoRedo.CreateSO("Spot light", "Created a Light");
  528. Light light = so.AddComponent<Light>();
  529. light.Type = LightType.Spot;
  530. Selection.SceneObject = so;
  531. FocusOnHierarchyOrScene();
  532. EditorApplication.SetSceneDirty();
  533. }
  534. /// <summary>
  535. /// Creates a new scene object with a directional light component.
  536. /// </summary>
  537. [MenuItem("Scene Objects/Directional light", 8898)]
  538. [ToolbarItem("Directional light", ToolbarIcon.NewDirLight, "New directional light", 1596)]
  539. private static void AddDirectionalLightSO()
  540. {
  541. SceneObject so = UndoRedo.CreateSO("Directional light", "Created a Light");
  542. Light light = so.AddComponent<Light>();
  543. light.Type = LightType.Directional;
  544. Selection.SceneObject = so;
  545. FocusOnHierarchyOrScene();
  546. EditorApplication.SetSceneDirty();
  547. }
  548. /// <summary>
  549. /// Creates a new scene object with a GUI widget component.
  550. /// </summary>
  551. [MenuItem("Scene Objects/GUI widget", 8850, true)]
  552. private static void AddGUIWidgetSO()
  553. {
  554. SceneObject so = UndoRedo.CreateSO("GUIWidget", "Created a GUIWidget");
  555. so.AddComponent<GUIWidget>();
  556. Selection.SceneObject = so;
  557. FocusOnHierarchyOrScene();
  558. EditorApplication.SetSceneDirty();
  559. }
  560. /// <summary>
  561. /// Creates a new scene object with a box primitive.
  562. /// </summary>
  563. [MenuItem("Scene Objects/3D primitives/Box", 8100, true)]
  564. [ToolbarItem("Cube", ToolbarIcon.NewCube, "Creates a scene object with a box primitive", 1700, true)]
  565. private static void Add3DBox()
  566. {
  567. SceneObject so = UndoRedo.CreateSO("Box", "Created a box");
  568. Renderable renderable = so.AddComponent<Renderable>();
  569. renderable.Mesh = Builtin.Box;
  570. Selection.SceneObject = so;
  571. FocusOnHierarchyOrScene();
  572. EditorApplication.SetSceneDirty();
  573. }
  574. /// <summary>
  575. /// Creates a new scene object with a sphere primitive.
  576. /// </summary>
  577. [MenuItem("Scene Objects/3D primitives/Sphere", 8099)]
  578. [ToolbarItem("Sphere", ToolbarIcon.NewSphere, "Creates a scene object with a sphere primitive", 1699)]
  579. private static void Add3DSphere()
  580. {
  581. SceneObject so = UndoRedo.CreateSO("Sphere", "Created a sphere");
  582. Renderable renderable = so.AddComponent<Renderable>();
  583. renderable.Mesh = Builtin.Sphere;
  584. Selection.SceneObject = so;
  585. FocusOnHierarchyOrScene();
  586. EditorApplication.SetSceneDirty();
  587. }
  588. /// <summary>
  589. /// Creates a new scene object with a cone primitive.
  590. /// </summary>
  591. [MenuItem("Scene Objects/3D primitives/Cone", 8098)]
  592. [ToolbarItem("Cone", ToolbarIcon.NewCone, "Creates a scene object with a cone primitive", 1698)]
  593. private static void Add3DCone()
  594. {
  595. SceneObject so = UndoRedo.CreateSO("Cone", "Created a cone");
  596. Renderable renderable = so.AddComponent<Renderable>();
  597. renderable.Mesh = Builtin.Cone;
  598. Selection.SceneObject = so;
  599. FocusOnHierarchyOrScene();
  600. EditorApplication.SetSceneDirty();
  601. }
  602. /// <summary>
  603. /// Creates a new scene object with a quad primitive.
  604. /// </summary>
  605. [MenuItem("Scene Objects/3D primitives/Quad", 8097)]
  606. [ToolbarItem("Quad", ToolbarIcon.NewQuad, "Creates a scene object with a quad primitive", 1697)]
  607. private static void Add3DQuad()
  608. {
  609. SceneObject so = UndoRedo.CreateSO("Quad", "Created a quad");
  610. Renderable renderable = so.AddComponent<Renderable>();
  611. renderable.Mesh = Builtin.Quad;
  612. Selection.SceneObject = so;
  613. FocusOnHierarchyOrScene();
  614. EditorApplication.SetSceneDirty();
  615. }
  616. /// <summary>
  617. /// Creates a new scene object with a disc primitive.
  618. /// </summary>
  619. [MenuItem("Scene Objects/3D primitives/Disc", 8096)]
  620. private static void Add3DDisc()
  621. {
  622. SceneObject so = UndoRedo.CreateSO("Disc", "Created a disc");
  623. Renderable renderable = so.AddComponent<Renderable>();
  624. renderable.Mesh = Builtin.Disc;
  625. Selection.SceneObject = so;
  626. FocusOnHierarchyOrScene();
  627. EditorApplication.SetSceneDirty();
  628. }
  629. /// <summary>
  630. /// Applies changes from the prefab instance to the prefab resource.
  631. /// </summary>
  632. [MenuItem("Scene Objects/Apply prefab", 8025, true)]
  633. private static void ApplyPrefab()
  634. {
  635. SceneObject so = Selection.SceneObject;
  636. if (so == null)
  637. return;
  638. PrefabUtility.ApplyPrefab(so);
  639. }
  640. /// <summary>
  641. /// Reverts a prefab instance to the original state of its prefab.
  642. /// </summary>
  643. [MenuItem("Scene Objects/Revert to prefab", 8024)]
  644. private static void RevertToPrefab()
  645. {
  646. SceneObject so = Selection.SceneObject;
  647. if (so == null)
  648. return;
  649. UndoRedo.RecordSO(so, true, "Reverting \"" + so.Name + "\" to prefab.");
  650. PrefabUtility.RevertPrefab(so);
  651. EditorApplication.SetSceneDirty();
  652. }
  653. /// <summary>
  654. /// Breaks a link between a prefab and its instance.
  655. /// </summary>
  656. [MenuItem("Scene Objects/Break prefab link", 8023)]
  657. private static void BreakPrefabLink()
  658. {
  659. SceneObject so = Selection.SceneObject;
  660. if (so == null)
  661. return;
  662. UndoRedo.BreakPrefab(so, "Breaking prefab link for " + so.Name);
  663. EditorApplication.SetSceneDirty();
  664. }
  665. /// <summary>
  666. /// Cuts the currently selected scene object or resource.
  667. /// </summary>
  668. [MenuItem("Edit/Cut", 9450, true)]
  669. public static void Cut()
  670. {
  671. EditorApplication.TriggerGlobalShortcut(EditorApplication.CutKey);
  672. }
  673. /// <summary>
  674. /// Copies the currently selected scene object or resource.
  675. /// </summary>
  676. [MenuItem("Edit/Copy", 9449)]
  677. public static void Copy()
  678. {
  679. EditorApplication.TriggerGlobalShortcut(EditorApplication.CopyKey);
  680. }
  681. /// <summary>
  682. /// Pastes the scene objects or resources that were previously cut or copied.
  683. /// </summary>
  684. [MenuItem("Edit/Paste", 9448)]
  685. public static void Paste()
  686. {
  687. EditorApplication.TriggerGlobalShortcut(EditorApplication.PasteKey);
  688. }
  689. /// <summary>
  690. /// Deletes currently selected scene objects or resources.
  691. /// </summary>
  692. [MenuItem("Edit/Delete", 9447)]
  693. public static void Delete()
  694. {
  695. EditorApplication.TriggerGlobalShortcut(EditorApplication.DeleteKey);
  696. }
  697. /// <summary>
  698. /// Duplicates currently selected scene objects or resources.
  699. /// </summary>
  700. [MenuItem("Edit/Duplicate", 9446)]
  701. public static void Duplicate()
  702. {
  703. EditorApplication.TriggerGlobalShortcut(EditorApplication.DuplicateKey);
  704. }
  705. /// <summary>
  706. /// Executes the last command on the undo stack, undoing its operations.
  707. /// </summary>
  708. [MenuItem("Edit/Undo", ButtonModifier.Ctrl, ButtonCode.Z, 9500, true)]
  709. [ToolbarItem("Undo", ToolbarIcon.Undo, "Undo (Ctrl + Z)", 1900, true)]
  710. public static void Undo()
  711. {
  712. EditorWindow[] allWindows = EditorWindow.AllWindows;
  713. foreach (var window in allWindows)
  714. {
  715. if (!window.HasFocus)
  716. continue;
  717. UndoRedo localStack = window.UndoRedo;
  718. if (localStack == null)
  719. continue;
  720. localStack.Undo();
  721. return;
  722. }
  723. UndoRedo.Global.Undo();
  724. }
  725. /// <summary>
  726. /// Executes the last command on the redo stack (last command we called undo on), re-applying its operation.
  727. /// </summary>
  728. [MenuItem("Edit/Redo", ButtonModifier.Ctrl, ButtonCode.Y, 9499)]
  729. [ToolbarItem("Redo", ToolbarIcon.Redo, "Redo (Ctrl + Y)", 1899)]
  730. public static void Redo()
  731. {
  732. EditorWindow[] allWindows = EditorWindow.AllWindows;
  733. foreach (var window in allWindows)
  734. {
  735. if (!window.HasFocus)
  736. continue;
  737. UndoRedo localStack = window.UndoRedo;
  738. if (localStack == null)
  739. continue;
  740. localStack.Redo();
  741. return;
  742. }
  743. UndoRedo.Global.Redo();
  744. }
  745. /// <summary>
  746. /// Sets keyboard focus to the Hierarchy or Scene windows if open.
  747. /// </summary>
  748. private static void FocusOnHierarchyOrScene()
  749. {
  750. SceneWindow sceneWindow = EditorWindow.GetWindow<SceneWindow>();
  751. if (sceneWindow != null)
  752. {
  753. sceneWindow.HasFocus = true;
  754. return;
  755. }
  756. HierarchyWindow hierarchyWindow = EditorWindow.GetWindow<HierarchyWindow>();
  757. if (hierarchyWindow != null)
  758. hierarchyWindow.HasFocus = true;
  759. }
  760. }
  761. /** @} */
  762. }