Player.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. SharedPtr<Scene> scene(new Scene(context_));
  33. if (!scene->LoadXML(*file))
  34. {
  35. return 0;
  36. }
  37. currentScene_ = scene;
  38. if(!camera)
  39. {
  40. PODVector<Node*> cameraNodes;
  41. scene->GetChildrenWithComponent(cameraNodes, Camera::GetTypeStatic(), true);
  42. if (cameraNodes.Size())
  43. {
  44. camera = cameraNodes[0]->GetComponent<Camera>();
  45. }
  46. }
  47. viewport_->SetScene(scene);
  48. if (camera)
  49. viewport_->SetCamera(camera);
  50. return scene;
  51. }
  52. }