]> git.localhorst.tv Git - l2e.git/blobdiff - src/menu/CapsuleChangeMenu.cpp
implemented capsule/class selection
[l2e.git] / src / menu / CapsuleChangeMenu.cpp
index cac2056aecab713fe075f0c5fb3205010cb0b996..912f81aa513b6fde2e19d0bc2fc638256b3e0802 100644 (file)
@@ -54,8 +54,52 @@ void CapsuleChangeMenu::HandleEvents(const Input &input) {
        if (input.JustPressed(Input::ACTION_B)) {
                Ctrl().PopState();
        }
+
+       if (input.JustPressed(Input::PAD_UP)) {
+               NextClass();
+       }
+       if (input.JustPressed(Input::PAD_RIGHT)) {
+               NextCapsule();
+       }
+       if (input.JustPressed(Input::PAD_DOWN)) {
+               PreviousClass();
+       }
+       if (input.JustPressed(Input::PAD_LEFT)) {
+               PreviousCapsule();
+       }
 }
 
+void CapsuleChangeMenu::NextCapsule() {
+       int &index = parent->Game().state->capsule;
+       ++index;
+       index %= parent->Game().state->NumCapsules();
+       // skip unexplored
+       while (parent->Game().state->GetCapsule().MaxClass() <= 0) {
+               ++index;
+               index %= parent->Game().state->NumCapsules();
+       }
+}
+
+void CapsuleChangeMenu::PreviousCapsule() {
+       int &index = parent->Game().state->capsule;
+       --index;
+       if (index < 0) index += parent->Game().state->NumCapsules();
+       // skip unexplored
+       while (GetCapsule().MaxClass() <= 0) {
+               --index;
+               if (index < 0) index += parent->Game().state->NumCapsules();
+       }
+}
+
+void CapsuleChangeMenu::NextClass() {
+       GetCapsule().NextClass();
+}
+
+void CapsuleChangeMenu::PreviousClass() {
+       GetCapsule().PreviousClass();
+}
+
+
 void CapsuleChangeMenu::UpdateWorld(float deltaT) {
 
 }
@@ -116,7 +160,7 @@ void CapsuleChangeMenu::RenderClasses(SDL_Surface *screen, const Vector<int> &of
                        parent->Res().capsuleSelectLadder->Draw(
                                        screen, cursor,
                                        j < parent->Game().state->capsules[i].MaxClass(), j);
-                       if (&parent->Game().state->capsules[i] == parent->Game().state->capsule
+                       if (i == parent->Game().state->capsule
                                        && parent->Game().state->capsules[i].CurrentClass() == j) {
                                parent->Res().capsuleSelectCursor->Draw(screen, cursor);
                        }
@@ -149,6 +193,10 @@ int CapsuleChangeMenu::Height() const {
        return parent->Height();
 }
 
+Capsule &CapsuleChangeMenu::GetCapsule() {
+       return parent->GetCapsule();
+}
+
 const Capsule &CapsuleChangeMenu::GetCapsule() const {
        return parent->GetCapsule();
 }