summaryrefslogtreecommitdiff
path: root/src/gui/statuspopup.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/statuspopup.cpp')
-rw-r--r--src/gui/statuspopup.cpp543
1 files changed, 543 insertions, 0 deletions
diff --git a/src/gui/statuspopup.cpp b/src/gui/statuspopup.cpp
new file mode 100644
index 000000000..4d2c48fa7
--- /dev/null
+++ b/src/gui/statuspopup.cpp
@@ -0,0 +1,543 @@
+/*
+ * The Mana World
+ * Copyright (C) 2008 The Legend of Mazzeroth Development Team
+ * Copyright (C) 2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 Andrei Karas
+ *
+ * This file is part of The Mana World.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "gui/statuspopup.h"
+
+#include "gui/gui.h"
+#include "gui/palette.h"
+
+#include "gui/widgets/layout.h"
+#include "gui/widgets/textbox.h"
+
+#include "graphics.h"
+#include "localplayer.h"
+#include "units.h"
+#include "viewport.h"
+#include "keyboardconfig.h"
+
+#include "utils/gettext.h"
+#include "utils/stringutils.h"
+
+#include <guichan/font.hpp>
+#include <guichan/widgets/label.hpp>
+
+StatusPopup::StatusPopup():
+ Popup("StatusPopup")
+{
+
+ const int fontHeight = getFont()->getHeight();
+
+ mMoveType = new gcn::Label;
+ mMoveType->setPosition(getPadding(), getPadding());
+
+ mCrazyMoveType = new gcn::Label;
+ mCrazyMoveType->setPosition(getPadding(), fontHeight + getPadding());
+
+ mMoveToTargetType = new gcn::Label;
+ mMoveToTargetType->setPosition(getPadding(),
+ 2 * fontHeight + getPadding());
+
+ mFollowMode = new gcn::Label;
+ mFollowMode->setPosition(getPadding(), 3 * fontHeight + getPadding());
+
+ mAttackWeaponType = new gcn::Label;
+ mAttackWeaponType->setPosition(getPadding(),
+ 4 + 4 * fontHeight + getPadding());
+
+ mAttackType = new gcn::Label;
+ mAttackType->setPosition(getPadding(), 4 + 5 * fontHeight + getPadding());
+
+ mMagicAttackType = new gcn::Label;
+ mMagicAttackType->setPosition(getPadding(),
+ 4 + 6 * fontHeight + getPadding());
+
+ mDropCounter = new gcn::Label;
+ mDropCounter->setPosition(getPadding(), 8 + 7 * fontHeight + getPadding());
+
+ mPickUpType = new gcn::Label;
+ mPickUpType->setPosition(getPadding(), 8 + 8 * fontHeight + getPadding());
+
+ mMapType = new gcn::Label;
+ mMapType->setPosition(getPadding(), 12 + 9 * fontHeight + getPadding());
+
+ mImitationMode = new gcn::Label;
+ mImitationMode->setPosition(getPadding(),
+ 16 + 10 * fontHeight + getPadding());
+
+ mAwayMode = new gcn::Label;
+ mAwayMode->setPosition(getPadding(), 16 + 11 * fontHeight + getPadding());
+
+ mCameraMode = new gcn::Label;
+ mCameraMode->setPosition(getPadding(),
+ 16 + 12 * fontHeight + getPadding());
+
+ mDisableGameModifiers = new gcn::Label;
+ mDisableGameModifiers->setPosition(getPadding(),
+ 20 + 13 * fontHeight + getPadding());
+
+ add(mMoveType);
+ add(mCrazyMoveType);
+ add(mMoveToTargetType);
+ add(mFollowMode);
+ add(mAttackWeaponType);
+ add(mAttackType);
+ add(mDropCounter);
+ add(mPickUpType);
+ add(mMapType);
+ add(mMagicAttackType);
+ add(mDisableGameModifiers);
+ add(mImitationMode);
+ add(mAwayMode);
+ add(mCameraMode);
+
+// addMouseListener(this);
+}
+
+StatusPopup::~StatusPopup()
+{
+}
+
+void StatusPopup::update()
+{
+ updateLabels();
+
+ int minWidth = mMoveType->getWidth();
+
+ if (mMoveToTargetType->getWidth() > minWidth)
+ minWidth = mMoveToTargetType->getWidth();
+ if (mFollowMode->getWidth() > minWidth)
+ minWidth = mFollowMode->getWidth();
+ if (mCrazyMoveType->getWidth() > minWidth)
+ minWidth = mCrazyMoveType->getWidth();
+ if (mAttackWeaponType->getWidth() > minWidth)
+ minWidth = mAttackWeaponType->getWidth();
+ if (mAttackType->getWidth() > minWidth)
+ minWidth = mAttackType->getWidth();
+ if (mDropCounter->getWidth() > minWidth)
+ minWidth = mDropCounter->getWidth();
+ if (mPickUpType->getWidth() > minWidth)
+ minWidth = mPickUpType->getWidth();
+ if (mMapType->getWidth() > minWidth)
+ minWidth = mMapType->getWidth();
+ if (mMagicAttackType->getWidth() > minWidth)
+ minWidth = mMagicAttackType->getWidth();
+ if (mDisableGameModifiers->getWidth() > minWidth)
+ minWidth = mDisableGameModifiers->getWidth();
+ if (mAwayMode->getWidth() > minWidth)
+ minWidth = mAwayMode->getWidth();
+ if (mCameraMode->getWidth() > minWidth)
+ minWidth = mCameraMode->getWidth();
+ if (mImitationMode->getWidth() > minWidth)
+ minWidth = mImitationMode->getWidth();
+
+ minWidth += 16 + 2 * getPadding();
+ setWidth(minWidth);
+
+ const int fontHeight = getFont()->getHeight();
+
+ setHeight(24 + 8 + 14 * fontHeight + getPadding());
+}
+
+void StatusPopup::view(int x, int y)
+{
+ const int distance = 20;
+
+ int posX = std::max(0, x - getWidth() / 2);
+ int posY = y + distance;
+
+ if (posX + getWidth() > graphics->getWidth())
+ posX = graphics->getWidth() - getWidth();
+ if (posY + getHeight() > graphics->getHeight())
+ posY = y - getHeight() - distance;
+
+ update();
+
+ setPosition(posX, posY);
+ setVisible(true);
+ requestMoveToTop();
+}
+
+void StatusPopup::updateLabels()
+{
+ if (!player_node || !viewport)
+ return;
+
+ switch (player_node->getInvertDirection())
+ {
+ case 0:
+ mMoveType->setCaption("(D) default moves "
+ + keyboard.getKeyValueString(keyboard.KEY_INVERT_DIRECTION));
+ break;
+
+ case 1:
+ mMoveType->setCaption("(I) invert moves "
+ + keyboard.getKeyValueString(keyboard.KEY_INVERT_DIRECTION));
+ break;
+
+ case 2:
+ mMoveType->setCaption("(c) moves with some crazy moves "
+ + keyboard.getKeyValueString(keyboard.KEY_INVERT_DIRECTION));
+
+ case 3:
+ mMoveType->setCaption("(C) moves with crazy moves "
+ + keyboard.getKeyValueString(keyboard.KEY_INVERT_DIRECTION));
+ break;
+
+ case 4:
+ mMoveType->setCaption("(d) double normal + crazy "
+ + keyboard.getKeyValueString(keyboard.KEY_INVERT_DIRECTION));
+ break;
+
+ default:
+ mMoveType->setCaption("(?) move "
+ + keyboard.getKeyValueString(keyboard.KEY_INVERT_DIRECTION));
+ break;
+ }
+ mMoveType->adjustSize();
+
+ if (player_node->getCrazyMoveType() < 10)
+ {
+ mCrazyMoveType->setCaption(strprintf("(%d) crazy move number %d ",
+ player_node->getCrazyMoveType(), player_node->getCrazyMoveType())
+ + keyboard.getKeyValueString(
+ keyboard.KEY_CHANGE_CRAZY_MOVES_TYPE));
+ }
+ else
+ {
+ switch (player_node->getCrazyMoveType())
+ {
+ case 10:
+ mCrazyMoveType->setCaption("(a) custom crazy move "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_CHANGE_CRAZY_MOVES_TYPE));
+ break;
+ default:
+ mCrazyMoveType->setCaption("(?) crazy move "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_CHANGE_CRAZY_MOVES_TYPE));
+ break;
+ }
+ }
+ mCrazyMoveType->adjustSize();
+
+ switch (player_node->getMoveToTargetType())
+ {
+ case 0:
+ mMoveToTargetType->setCaption("(0) default moves to target "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_CHANGE_MOVE_TO_TARGET));
+ break;
+ case 1:
+ mMoveToTargetType->setCaption("(1) moves to target in distance 1 "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_CHANGE_MOVE_TO_TARGET));
+ break;
+ case 2:
+ mMoveToTargetType->setCaption("(2) moves to target in distance 3 "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_CHANGE_MOVE_TO_TARGET));
+ break;
+ case 3:
+ mMoveToTargetType->setCaption("(3) moves to target in distance 3 "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_CHANGE_MOVE_TO_TARGET));
+ break;
+ case 4:
+ mMoveToTargetType->setCaption("(5) moves to target in distance 5 "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_CHANGE_MOVE_TO_TARGET));
+ break;
+ case 5:
+ mMoveToTargetType->setCaption("(7) moves to target in distance 7 "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_CHANGE_MOVE_TO_TARGET));
+ break;
+ case 6:
+ mMoveToTargetType->setCaption(
+ "(A) moves to target in attack range "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_CHANGE_MOVE_TO_TARGET));
+ break;
+ default:
+ mMoveToTargetType->setCaption("(?) move to target "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_CHANGE_MOVE_TO_TARGET));
+ break;
+ }
+ mMoveToTargetType->adjustSize();
+
+ switch (player_node->getFollowMode())
+ {
+ case 0:
+ mFollowMode->setCaption("(D) default follow "
+ + keyboard.getKeyValueString(keyboard.KEY_CHANGE_FOLLOW_MODE));
+ break;
+ case 1:
+ mFollowMode->setCaption("(R) relative follow "
+ + keyboard.getKeyValueString(keyboard.KEY_CHANGE_FOLLOW_MODE));
+ break;
+ case 2:
+ mFollowMode->setCaption("(M) mirror follow "
+ + keyboard.getKeyValueString(keyboard.KEY_CHANGE_FOLLOW_MODE));
+ break;
+ case 3:
+ mFollowMode->setCaption("(P) pet follow "
+ + keyboard.getKeyValueString(keyboard.KEY_CHANGE_FOLLOW_MODE));
+ break;
+ default:
+ mFollowMode->setCaption("(?) unknown follow "
+ + keyboard.getKeyValueString(keyboard.KEY_CHANGE_FOLLOW_MODE));
+ break;
+ }
+ mFollowMode->adjustSize();
+
+ switch (player_node->getAttackWeaponType())
+ {
+ case 1:
+ mAttackWeaponType->setCaption("(D) default attack "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_CHANGE_ATTACK_WEAPON_TYPE));
+ break;
+ case 2:
+ mAttackWeaponType->setCaption("(s) switch attack without shield "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_CHANGE_ATTACK_WEAPON_TYPE));
+ break;
+ case 3:
+ mAttackWeaponType->setCaption("(S) switch attack with shield "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_CHANGE_ATTACK_WEAPON_TYPE));
+ break;
+ default:
+ mAttackWeaponType->setCaption("(?) attack "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_CHANGE_ATTACK_WEAPON_TYPE));
+ break;
+ }
+ mAttackWeaponType->adjustSize();
+
+ switch (player_node->getAttackType())
+ {
+ case 0:
+ mAttackType->setCaption("(D) default attack "
+ + keyboard.getKeyValueString(keyboard.KEY_CHANGE_ATTACK_TYPE));
+ break;
+ case 1:
+ mAttackType->setCaption("(G) go and attack "
+ + keyboard.getKeyValueString(keyboard.KEY_CHANGE_ATTACK_TYPE));
+ break;
+ case 2:
+ mAttackType->setCaption("(A) go, attack, pickup "
+ + keyboard.getKeyValueString(keyboard.KEY_CHANGE_ATTACK_TYPE));
+ break;
+ case 3:
+ mAttackType->setCaption("(d) without auto attack "
+ + keyboard.getKeyValueString(keyboard.KEY_CHANGE_ATTACK_TYPE));
+ break;
+ default:
+ mAttackType->setCaption("(?) attack "
+ + keyboard.getKeyValueString(keyboard.KEY_CHANGE_ATTACK_TYPE));
+ break;
+ }
+ mAttackType->adjustSize();
+
+ mDropCounter->setCaption(strprintf("(%d) drop counter %d ",
+ player_node->getQuickDropCounter(), player_node->getQuickDropCounter())
+ + keyboard.getKeyValueString(keyboard.KEY_SWITCH_QUICK_DROP));
+ mDropCounter->adjustSize();
+
+ switch (player_node->getPickUpType())
+ {
+ case 0:
+ mPickUpType->setCaption("(S) small pick up 1x1 cells "
+ + keyboard.getKeyValueString(keyboard.KEY_CHANGE_PICKUP_TYPE));
+ break;
+ case 1:
+ mPickUpType->setCaption("(D) default pick up 2x1 cells "
+ + keyboard.getKeyValueString(keyboard.KEY_CHANGE_PICKUP_TYPE));
+ break;
+ case 2:
+ mPickUpType->setCaption("(F) forward pick up 2x3 cells "
+ + keyboard.getKeyValueString(keyboard.KEY_CHANGE_PICKUP_TYPE));
+ break;
+ case 3:
+ mPickUpType->setCaption("(3) pick up 3x3 cells "
+ + keyboard.getKeyValueString(keyboard.KEY_CHANGE_PICKUP_TYPE));
+ break;
+ case 4:
+ mPickUpType->setCaption("(g) go and pick up in distance 4 "
+ + keyboard.getKeyValueString(keyboard.KEY_CHANGE_PICKUP_TYPE));
+ break;
+ case 5:
+ mPickUpType->setCaption("(G) go and pick up in distance 8 "
+ + keyboard.getKeyValueString(keyboard.KEY_CHANGE_PICKUP_TYPE));
+ break;
+ case 6:
+ mPickUpType->setCaption("(A) go and pick up in max distance "
+ + keyboard.getKeyValueString(keyboard.KEY_CHANGE_PICKUP_TYPE));
+ break;
+ default:
+ mPickUpType->setCaption("(?) pick up "
+ + keyboard.getKeyValueString(keyboard.KEY_CHANGE_PICKUP_TYPE));
+ break;
+ }
+ mPickUpType->adjustSize();
+
+ switch (viewport->getDebugPath())
+ {
+ case 0:
+ mMapType->setCaption("(N) normal map view "
+ + keyboard.getKeyValueString(keyboard.KEY_PATHFIND));
+ break;
+ case 1:
+ mMapType->setCaption("(D) debug map view "
+ + keyboard.getKeyValueString(keyboard.KEY_PATHFIND));
+ break;
+ case 2:
+ mMapType->setCaption("(u) ultra map view "
+ + keyboard.getKeyValueString(keyboard.KEY_PATHFIND));
+ break;
+ case 3:
+ mMapType->setCaption("(U) ultra map view 2 "
+ + keyboard.getKeyValueString(keyboard.KEY_PATHFIND));
+ break;
+ case 4:
+ mMapType->setCaption("(e) empty map view "
+ + keyboard.getKeyValueString(keyboard.KEY_PATHFIND));
+ break;
+ case 5:
+ mMapType->setCaption("(b) black & white map view "
+ + keyboard.getKeyValueString(keyboard.KEY_PATHFIND));
+ break;
+ default:
+ mMapType->setCaption("(?) map view "
+ + keyboard.getKeyValueString(keyboard.KEY_PATHFIND));
+ break;
+ }
+ mMapType->adjustSize();
+
+ switch (player_node->getMagicAttackType())
+ {
+ case 0:
+ mMagicAttackType->setCaption("(f) use #flar for magic attack "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_SWITCH_MAGIC_ATTACK));
+ break;
+ case 1:
+ mMagicAttackType->setCaption("(c) use #chiza for magic attack "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_SWITCH_MAGIC_ATTACK));
+ break;
+ case 2:
+ mMagicAttackType->setCaption("(I) use #ingrav for magic attack "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_SWITCH_MAGIC_ATTACK));
+ break;
+ case 3:
+ mMagicAttackType->setCaption("(F) use #frillyar for magic attack "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_SWITCH_MAGIC_ATTACK));
+ break;
+ case 4:
+ mMagicAttackType->setCaption("(U) use #upmarmu for magic attack "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_SWITCH_MAGIC_ATTACK));
+ break;
+ default:
+ mMagicAttackType->setCaption("(?) magic attack "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_SWITCH_MAGIC_ATTACK));
+ break;
+ }
+ mMagicAttackType->adjustSize();
+
+ switch (player_node->getImitationMode())
+ {
+ case 0:
+ mImitationMode->setCaption("(D) default imitation "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_CHANGE_IMITATION_MODE));
+ break;
+ case 1:
+ mImitationMode->setCaption("(O) outfits imitation "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_CHANGE_IMITATION_MODE));
+ break;
+ default:
+ mImitationMode->setCaption("(?) imitation "
+ + keyboard.getKeyValueString(
+ keyboard.KEY_CHANGE_IMITATION_MODE));
+ break;
+ }
+ mImitationMode->adjustSize();
+
+ switch (player_node->getAwayMode())
+ {
+ case 0:
+ mAwayMode->setCaption("(O) on keyboard "
+ + keyboard.getKeyValueString(keyboard.KEY_AWAY));
+ break;
+ case 1:
+ mAwayMode->setCaption("(A) away "
+ + keyboard.getKeyValueString(keyboard.KEY_AWAY));
+ break;
+ default:
+ mAwayMode->setCaption("(?) away "
+ + keyboard.getKeyValueString(keyboard.KEY_AWAY));
+ break;
+ }
+ mAwayMode->adjustSize();
+
+ switch (viewport->getCameraMode())
+ {
+ case 0:
+ mCameraMode->setCaption("(G) game camera mode "
+ + keyboard.getKeyValueString(keyboard.KEY_CAMERA));
+ break;
+ case 1:
+ mCameraMode->setCaption("(F) free camera mode "
+ + keyboard.getKeyValueString(keyboard.KEY_CAMERA));
+ break;
+ case 2:
+ mCameraMode->setCaption("(D) design camera mode "
+ + keyboard.getKeyValueString(keyboard.KEY_CAMERA));
+ break;
+ default:
+ mCameraMode->setCaption("(?) away "
+ + keyboard.getKeyValueString(keyboard.KEY_CAMERA));
+ break;
+ }
+ mCameraMode->adjustSize();
+
+ if (player_node->getDisableGameModifiers())
+ {
+ mDisableGameModifiers->setCaption("Game modifiers are disabled "
+ + keyboard.getKeyValueString(keyboard.KEY_DISABLE_GAME_MODIFIERS));
+ }
+ else
+ {
+ mDisableGameModifiers->setCaption("Game modifiers are enabled "
+ + keyboard.getKeyValueString(keyboard.KEY_DISABLE_GAME_MODIFIERS));
+ }
+ mDisableGameModifiers->adjustSize();
+}