Guest User

Untitled

a guest
Jul 20th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.43 KB | None | 0 0
  1. extern crate amethyst;
  2. use amethyst::assets::Loader;
  3. use amethyst::core::cgmath::Vector3;
  4. use amethyst::core::transform::{GlobalTransform, Transform, TransformBundle};
  5. use amethyst::prelude::*;
  6. use amethyst::renderer::*;
  7.  
  8. struct Scene;
  9.  
  10. impl<'a, 'b> State<GameData<'a, 'b>> for Scene {
  11. fn on_start(&mut self, state: StateData<GameData>) {
  12. // CAM
  13.  
  14. state
  15. .world
  16. .create_entity()
  17. .with(Camera::standard_3d(5., 4.))
  18. .with(GlobalTransform::default())
  19. .with(Transform {
  20. translation: Vector3::new(0., 0., 3.),
  21. ..Default::default()
  22. })
  23. .build();
  24.  
  25. // LIGHT
  26.  
  27. let light: Light = PointLight {
  28. intensity: 12.0,
  29. color: [1., 1., 1.].into(),
  30. ..PointLight::default()
  31. }.into();
  32.  
  33. state
  34. .world
  35. .create_entity()
  36. .with(light)
  37. .with(GlobalTransform::default())
  38. .with(Transform {
  39. translation: Vector3::new(0., 1., 3.),
  40. ..Default::default()
  41. })
  42. .build();
  43.  
  44. // SHADED CUBE
  45.  
  46. let material = {
  47. let loader = state.world.read_resource::<Loader>();
  48. let mat_defs = state.world.read_resource::<MaterialDefaults>();
  49. let albedo =
  50. loader.load_from_data([0.6, 0.4, 0.2, 1.].into(), (), &state.world.read_resource());
  51. Material {
  52. albedo,
  53. ..mat_defs.0.clone()
  54. }
  55. };
  56.  
  57. let mesh: MeshHandle = {
  58. let loader = state.world.read_resource::<Loader>();
  59. let verts = Shape::Cube.generate::<Vec<PosTex>>(Some((0.3, 0.3, 0.3)));
  60. loader.load_from_data(verts, (), &state.world.read_resource())
  61. };
  62.  
  63. state
  64. .world
  65. .create_entity()
  66. .with(mesh)
  67. .with(material.clone())
  68. .with(GlobalTransform::default())
  69. .with(Transform {
  70. translation: Vector3::new(-1., -0.5, 0.),
  71. ..Default::default()
  72. })
  73. .build();
  74.  
  75. // FLAT CUBE
  76.  
  77. let mesh: MeshHandle = {
  78. let loader = state.world.read_resource::<Loader>();
  79. let verts = Shape::Cube.generate::<Vec<PosNormTex>>(Some((0.3, 0.3, 0.3)));
  80. loader.load_from_data(verts, (), &state.world.read_resource())
  81. };
  82.  
  83. state
  84. .world
  85. .create_entity()
  86. .with(mesh)
  87. .with(material)
  88. .with(GlobalTransform::default())
  89. .with(Transform {
  90. translation: Vector3::new(1., -0.5, 0.),
  91. ..Default::default()
  92. })
  93. .build();
  94. }
  95. fn update(&mut self, state: StateData<GameData>) -> Trans<GameData<'a, 'b>> {
  96. state.data.update(&state.world);
  97. Trans::None
  98. }
  99. }
  100.  
  101. fn main() -> amethyst::Result<()> {
  102. amethyst::start_logger(Default::default());
  103.  
  104. let pipe = Pipeline::build().with_stage(
  105. Stage::with_backbuffer()
  106. .clear_target([0.01, 0.02, 0.03, 1.0], 1.0)
  107. .with_pass(DrawShaded::<PosNormTex>::new())
  108. .with_pass(DrawFlat::<PosTex>::new()),
  109. );
  110.  
  111. let state = GameDataBuilder::default()
  112. .with_bundle(TransformBundle::new())?
  113. .with_bundle(RenderBundle::new(pipe, Some(Default::default())))?;
  114.  
  115. Application::build("./", Scene)?.build(state)?.run();
  116. Ok(())
  117. }
Add Comment
Please, Sign In to add comment