- added more error checks in code and defaults for invalid font size values.
- re-enabled client side changing of values from connect menu without waiting for server reply.
This commit is contained in:
parent
4ba4b756c8
commit
ac31d06106
89
source/glest_game/global/metrics.cpp
Normal file
89
source/glest_game/global/metrics.cpp
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
// ==============================================================
|
||||||
|
// This file is part of Glest (www.glest.org)
|
||||||
|
//
|
||||||
|
// Copyright (C) 2001-2008 Martio Figueroa
|
||||||
|
//
|
||||||
|
// You can redistribute this code 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 (at your option) any later version
|
||||||
|
// ==============================================================
|
||||||
|
|
||||||
|
#include "metrics.h"
|
||||||
|
|
||||||
|
#include "element_type.h"
|
||||||
|
#include <stdexcept>
|
||||||
|
#include "leak_dumper.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
namespace Glest{ namespace Game{
|
||||||
|
|
||||||
|
|
||||||
|
// =====================================================
|
||||||
|
// class Metrics
|
||||||
|
// =====================================================
|
||||||
|
|
||||||
|
Metrics::Metrics(){
|
||||||
|
Config &config= Config::getInstance();
|
||||||
|
|
||||||
|
virtualW= 1000;
|
||||||
|
virtualH= 750;
|
||||||
|
|
||||||
|
screenW= config.getInt("ScreenWidth");
|
||||||
|
screenH= config.getInt("ScreenHeight");
|
||||||
|
|
||||||
|
minimapX= 10;
|
||||||
|
minimapY= 750-128-30+16;
|
||||||
|
minimapW= 128;
|
||||||
|
minimapH= 128;
|
||||||
|
|
||||||
|
displayX= 800;
|
||||||
|
displayY= 250;
|
||||||
|
displayW= 128;
|
||||||
|
displayH= 480;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Metrics &Metrics::getInstance(){
|
||||||
|
static const Metrics metrics;
|
||||||
|
return metrics;
|
||||||
|
}
|
||||||
|
|
||||||
|
float Metrics::getAspectRatio() const{
|
||||||
|
if(screenH == 0) {
|
||||||
|
throw runtime_error("div by 0 screenH == 0");
|
||||||
|
}
|
||||||
|
return static_cast<float>(screenW)/screenH;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Metrics::toVirtualX(int w) const{
|
||||||
|
if(screenW == 0) {
|
||||||
|
throw runtime_error("div by 0 screenW == 0");
|
||||||
|
}
|
||||||
|
return w*virtualW/screenW;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Metrics::toVirtualY(int h) const{
|
||||||
|
if(screenH == 0) {
|
||||||
|
throw runtime_error("div by 0 screenH == 0");
|
||||||
|
}
|
||||||
|
return h*virtualH/screenH;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Metrics::isInDisplay(int x, int y) const{
|
||||||
|
return
|
||||||
|
x > displayX &&
|
||||||
|
y > displayY &&
|
||||||
|
x < displayX+displayW &&
|
||||||
|
y < displayY+displayH;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Metrics::isInMinimap(int x, int y) const{
|
||||||
|
return
|
||||||
|
x > minimapX &&
|
||||||
|
y > minimapY &&
|
||||||
|
x < minimapX+minimapW &&
|
||||||
|
y < minimapY+minimapH;
|
||||||
|
}
|
||||||
|
|
||||||
|
}}// end namespace
|
|
@ -932,14 +932,22 @@ void Renderer::renderSelectionQuad(){
|
||||||
}
|
}
|
||||||
|
|
||||||
Vec2i computeCenteredPos(const string &text, const Font2D *font, int x, int y){
|
Vec2i computeCenteredPos(const string &text, const Font2D *font, int x, int y){
|
||||||
Vec2i textPos;
|
if(font == NULL) {
|
||||||
|
throw runtime_error("font == NULL");
|
||||||
|
}
|
||||||
const Metrics &metrics= Metrics::getInstance();
|
const Metrics &metrics= Metrics::getInstance();
|
||||||
const FontMetrics *fontMetrics= font->getMetrics();
|
const FontMetrics *fontMetrics= font->getMetrics();
|
||||||
|
|
||||||
textPos= Vec2i(
|
if(fontMetrics == NULL) {
|
||||||
x-metrics.toVirtualX(static_cast<int>(fontMetrics->getTextWidth(text)/2.f)),
|
throw runtime_error("fontMetrics == NULL");
|
||||||
y-metrics.toVirtualY(static_cast<int>(fontMetrics->getHeight()/2.f)));
|
}
|
||||||
|
|
||||||
|
int virtualX = (fontMetrics->getTextWidth(text) > 0 ? static_cast<int>(fontMetrics->getTextWidth(text)/2.f) : 5);
|
||||||
|
int virtualY = (fontMetrics->getHeight() > 0 ? static_cast<int>(fontMetrics->getHeight()/2.f) : 5);
|
||||||
|
|
||||||
|
Vec2i textPos(
|
||||||
|
x-metrics.toVirtualX(virtualX),
|
||||||
|
y-metrics.toVirtualY(virtualY));
|
||||||
|
|
||||||
return textPos;
|
return textPos;
|
||||||
}
|
}
|
||||||
|
|
|
@ -240,7 +240,7 @@ void MenuStateConnectedGame::mouseClick(int x, int y, MouseButton mouseButton){
|
||||||
NetworkManager &networkManager= NetworkManager::getInstance();
|
NetworkManager &networkManager= NetworkManager::getInstance();
|
||||||
ClientInterface* clientInterface= networkManager.getClientInterface();
|
ClientInterface* clientInterface= networkManager.getClientInterface();
|
||||||
|
|
||||||
if (!settingsReceivedFromServer) return;
|
//if (!settingsReceivedFromServer) return;
|
||||||
|
|
||||||
if(buttonDisconnect.mouseClick(x,y)){
|
if(buttonDisconnect.mouseClick(x,y)){
|
||||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user