MenuItems.cs 32 KB

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