Player.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #include <Atomic/IO/Log.h>
  2. #include <Atomic/Input/InputEvents.h>
  3. #include <Atomic/Resource/ResourceCache.h>
  4. #include <Atomic/Graphics/Renderer.h>
  5. #include <Atomic/Graphics/Camera.h>
  6. #include "Player.h"
  7. namespace AtomicPlayer
  8. {
  9. Player::Player(Context* context) :
  10. Object(context)
  11. {
  12. viewport_ = new Viewport(context_);
  13. GetSubsystem<Renderer>()->SetViewport(0, viewport_);
  14. SubscribeToEvent(E_EXITREQUESTED, HANDLER(Player, HandleExitRequested));
  15. }
  16. Player::~Player()
  17. {
  18. }
  19. void Player::HandleExitRequested(StringHash eventType, VariantMap& eventData)
  20. {
  21. currentScene_ = 0;
  22. viewport_ = 0;
  23. }
  24. Scene* Player::LoadScene(const String& filename, Camera *camera)
  25. {
  26. ResourceCache* cache = GetSubsystem<ResourceCache>();
  27. SharedPtr<File> file = cache->GetFile(filename);
  28. if (!file->IsOpen())
  29. {
  30. return 0;
  31. }
  32. Scene* scene = new Scene(context_);
  33. if (!scene->LoadXML(*file))
  34. {
  35. scene->ReleaseRef();
  36. return 0;
  37. }
  38. if (currentScene_.Null())
  39. {
  40. currentScene_ = scene;
  41. if(!camera)
  42. {
  43. PODVector<Node*> cameraNodes;
  44. scene->GetChildrenWithComponent(cameraNodes, Camera::GetTypeStatic(), true);
  45. if (cameraNodes.Size())
  46. {
  47. camera = cameraNodes[0]->GetComponent<Camera>();
  48. }
  49. }
  50. viewport_->SetScene(scene);
  51. if (camera)
  52. viewport_->SetCamera(camera);
  53. }
  54. return scene;
  55. }
  56. }