#pragma once
#include "libs.h"
#include "gui.h"
#include "view.h"

class Body;

class WorldView: public View {
public:
  WorldView(void);
  virtual void Update(void);
  virtual void Draw3D(void);
  static const float PICK_OBJECT_RECT_SIZE;
  void UpdateCommsOptions(void);
  bool GetShowLabels(void) { return m_labelsOn; }
  void DrawBgStars(void);
  vector3d GetExternalViewTranslation(void);
  void ApplyExternalViewRotation(matrix4x4d& m);
  virtual void Save(void);
  virtual void Load(void);
  enum CamType { CAM_FRONT, CAM_REAR, CAM_EXTERNAL };
  void SetCamType(enum CamType);
  enum CamType GetCamType(void) { return m_camType; }

  float m_externalViewRotX, m_externalViewRotY;
  float m_externalViewDist;
private:
  Gui::Button* AddCommsOption(const std::string msg, int ypos);
  void OnClickHyperspace(void);
  void OnClickBlastoff(void);
  void OnChangeWheelsState(Gui::MultiStateImageButton* b);
  void OnChangeLabelsState(Gui::MultiStateImageButton* b);
  void OnChangeFlightState(Gui::MultiStateImageButton* b);
  virtual bool OnMouseDown(Gui::MouseButtonEvent* e);
  Body* PickBody(const float screenX, const float screenY) const;
  Gui::ImageButton*           m_hyperspaceButton;
  GLuint                      m_bgstarsDlist;
  Gui::Fixed*                 m_commsOptions;
  Gui::Label*                 m_flightStatus;
  Gui::ImageButton*           m_launchButton;
  Gui::MultiStateImageButton* m_flightControlButton;
  bool                        m_labelsOn;
  enum CamType                m_camType;
};