From 74e68eb265dc34d0d435519136c0ec8c346ef653 Mon Sep 17 00:00:00 2001
From: Allanis <allanis.saracraft.studios@gmail.com>
Date: Tue, 14 Nov 2017 20:21:06 +0000
Subject: [PATCH] [Add] Wheels up/down transition.

---
 icons/wheels_down.png | Bin 0 -> 460 bytes
 icons/wheels_up.png   | Bin 0 -> 454 bytes
 src/ship.cpp          |  14 ++++++++++++++
 src/ship.h            |   4 ++++
 src/world_view.cpp    |  11 +++++++++++
 src/world_view.h      |   1 +
 6 files changed, 30 insertions(+)
 create mode 100644 icons/wheels_down.png
 create mode 100644 icons/wheels_up.png

diff --git a/icons/wheels_down.png b/icons/wheels_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..0ca99613b5a0aa8c536848187547e15a9eaff819
GIT binary patch
literal 460
zcmV;-0W<!IP)<h;3K|Lk000e1NJLTq0015U000&U0ssI2SOL4300001b5ch_0Itp)
z=>Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RT1{@S4E3OQz=l}o!8FWQhbVF}#
zZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b0Xa!TK~y-)&6U4vgfJAxU&Mk#P{`PW
zF8UwbEww|3($W8>qjV^a{UiE6xSr$H<+=(Tq#z_6GWoVEp>_z!q34fN5BjFOm*kUg
zzJV7Ky+m-CFyLa*iB5JZ*{O4<W~tWDhdXm{r8$!u7O#2`-8@ZKJznp5=woiJbOCf1
zxBm=t8h4CvV-X+PZ#c@3`rS_M@2Q_KgbSYMIT$_wT>ZXt;jXS%HAQRh!u6rK;Bg#_
zZ*l+V1Hd-fW?2>lL7U!)@HreXBu!H;IHgpllu|Bunx<nM7*H*xtg6bkZJpY-jfhgp
zLC|pr)i-FO4?hPz`1*Wn7iV=o#uy<45tUL(DMTcMFvcdJo2ot6D~bXU5m8qx%ko@r
z0knVX1Hk@cUzQ~RIF7SfZ**}kTGOYo{=o+}KmGuGo0EAt(0FM80000<MNUMnLSTZQ
CuDAyP

literal 0
HcmV?d00001

diff --git a/icons/wheels_up.png b/icons/wheels_up.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b2af35afac9cb02123787729ae42dc2931ee85b
GIT binary patch
literal 454
zcmV;%0XhDOP)<h;3K|Lk000e1NJLTq0015U000&U0ssI2SOL4300001b5ch_0Itp)
z=>Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RT1{@S48D`u4XaE2J8FWQhbVF}#
zZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b0W(QNK~y-)#nrKD!!Qs4(345QgOI^v
zvl!w(XqLJ|htko16gq@_NdLiWyriUB($&zZ#UORi<l9n2-9byR<*Jcg>Pb4o<9ytm
z$!5KQzj=c3#QVeQJi6TLa<84QjBC};&f1`NH?xk|*Mmu1t3LB{0U%j#PPwGl4uPLL
zS%(a{L%s1^+Rt^@y6;-W#5Q;Ctey2u2Ikp93n_L_J9EDHdKOZ6xR!zlDT<<yAM*A-
z1AuM0t*R=|^ZDicXKUpg8P2(of>LU(lu{uD=iFnrbhB1UwQb87GgrnKA}Xbv(CG#>
zU(ltGpGR|edwuK&M=jMjjtL=%sI}HwBO)Orj^hamk}lG^t`QLtO(YD%bdgR#XV)13
w99|Ah(*QseMa!$D367<W?q^N^1N#U18%b@Hwbb?+{r~^~07*qoM6N<$g6rPEmjD0&

literal 0
HcmV?d00001

diff --git a/src/ship.cpp b/src/ship.cpp
index 6442620..c1ee5a2 100644
--- a/src/ship.cpp
+++ b/src/ship.cpp
@@ -7,6 +7,8 @@
 #include "space.h"
 
 Ship::Ship(ShipType::Type shipType) : RigidBody() {
+  m_wheelTransition = 0;
+  m_wheelState = 0;
   m_dockedWith = 0;
   m_mesh = 0;
   m_shipType = shipType;
@@ -95,6 +97,12 @@ void Ship::AITurn(void) {
     dGeomSetData(ray, static_cast<Object*>(&m_laserCollisionObj));
     m_tempLaserGeom[i] = ray;
   }
+
+  if(m_wheelTransition != 0.0f) {
+    m_wheelState += m_wheelTransition*timeStep*0.001;
+    m_wheelState = CLAMP(m_wheelState, 0, 1);
+    if((m_wheelState == 0) || (m_wheelState == 1)) m_wheelTransition = 0;
+  }
 }
 
 const ShipType& Ship::GetShipType(void) {
@@ -124,6 +132,11 @@ void Ship::SetGunState(int idx, int state) {
   m_gunState[idx] = state;
 }
 
+void Ship::SetWheelState(bool down) {
+  if(down) m_wheelTransition = 1;
+  else m_wheelTransition = -1;
+}
+
 /* Assumed to be at model coords. */
 void Ship::RenderLaserfire(void) {
   const ShipType& stype = GetShipType();
@@ -167,6 +180,7 @@ void Ship::Render(const Frame* camFrame) {
   params.pAnim[ASRC_MINFRAC]  = L3D::GetGameTime() / 60;
   params.pAnim[ASRC_HOURFRAC] = L3D::GetGameTime() / 3600.0f;
   params.pAnim[ASRC_DAYFRAC]  = L3D::GetGameTime() / (24*3600.0f);
+  params.pAnim[ASRC_GEAR]     = m_wheelState;
 
   strncpy(params.pText[0], GetLabel().c_str(), sizeof(params.pText));
 
diff --git a/src/ship.h b/src/ship.h
index 43f09ae..a51cc73 100644
--- a/src/ship.h
+++ b/src/ship.h
@@ -29,6 +29,7 @@ public:
   const ShipType& GetShipType(void);
   void CalcStats(shipstats_t* stats);
   void UpdateMass(void);
+  void SetWheelState(bool down);
 
   class LaserObj : public Object {
   public:
@@ -45,6 +46,9 @@ protected:
   ObjMesh* m_mesh;
   Uint32 m_gunState[ShipType::GUNMOUNT_MAX];
 private:
+  float m_wheelState;
+  float m_wheelTransition;
+
   float m_thrusters[ShipType::THRUSTER_MAX];
   float m_angThrusters[3];
   dGeomID m_tempLaserGeom[ShipType::GUNMOUNT_MAX];
diff --git a/src/world_view.cpp b/src/world_view.cpp
index 549e391..ed176cc 100644
--- a/src/world_view.cpp
+++ b/src/world_view.cpp
@@ -11,6 +11,13 @@ static const float lightCol[] = { 1, 1, .9, 0 };
 WorldView::WorldView(void): View() {
   SetTransparency(true);
   
+  Gui::MultiStateImageButton* wheels_button = new Gui::MultiStateImageButton();
+  wheels_button->SetShortcut(SDLK_F7, KMOD_NONE);
+  wheels_button->AddState(0, "icons/wheels_up.png");
+  wheels_button->AddState(1, "icons/wheels_down.png");
+  wheels_button->onClick.connect(sigc::mem_fun(this, &WorldView::OnChangeWheelsState));
+  m_rightButtonBar->Add(wheels_button, 34, 2);
+
   m_hyperspaceButton = new Gui::ImageButton("icons/hyperspace_f8.png");
   m_hyperspaceButton->SetShortcut(SDLK_F8, KMOD_NONE);
   m_hyperspaceButton->onClick.connect(sigc::mem_fun(this, &WorldView::OnClickHyperspace));
@@ -37,6 +44,10 @@ WorldView::WorldView(void): View() {
   glEndList();
 }
 
+void WorldView::OnChangeWheelsState(Gui::MultiStateImageButton* b) {
+  L3D::player->SetWheelState(b->GetState());
+}
+
 void WorldView::OnClickHyperspace(void) {
   StarSystem* s = L3D::GetSelectedSystem();
   if(s /* && isn's current system. */) {
diff --git a/src/world_view.h b/src/world_view.h
index 77d86c8..4fcaeb5 100644
--- a/src/world_view.h
+++ b/src/world_view.h
@@ -12,6 +12,7 @@ public:
 
 private:
   void OnClickHyperspace(void);
+  void OnChangeWheelsState(Gui::MultiStateImageButton* b);
   Gui::ImageButton* m_hyperspaceButton;
   GLuint m_bgstarsDlist;
 };