MegaGlest/source/glest_game/global/metrics.cpp

116 lines
2.4 KiB
C++

// ==============================================================
// This file is part of Glest (www.glest.org)
//
// Copyright (C) 2001-2008 Martiño 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 <stdexcept>
#include "platform_util.h"
#include "leak_dumper.h"
using namespace std;
namespace Glest{ namespace Game{
// =====================================================
// class Metrics
// =====================================================
Metrics::Metrics() {
reloadData();
}
void Metrics::reload(int resWidth, int resHeight) {
Metrics *metrics = getInstancePtr();
metrics->reloadData(resWidth, resHeight);
}
void Metrics::reloadData(int resWidth, int resHeight) {
Config &config = Config::getInstance();
virtualW= 1000;
virtualH= 750;
if(resWidth > 0) {
screenW= resWidth;
}
else {
screenW= config.getInt("ScreenWidth");
}
if(resHeight > 0) {
screenH= resHeight;
}
else {
screenH= config.getInt("ScreenHeight");
}
minimapX= 10;
minimapY= 750-128-30+16;
minimapW= 128;
minimapH= 128;
displayX= 800;
displayY= 250;
displayW= 128;
displayH= 480;
}
Metrics * Metrics::getInstancePtr() {
static Metrics metrics;
return &metrics;
}
const Metrics &Metrics::getInstance(){
Metrics *metrics = getInstancePtr();
return *metrics;
}
float Metrics::getAspectRatio() const{
if(screenH == 0) {
throw megaglest_runtime_error("div by 0 screenH == 0");
}
return static_cast<float>(screenW)/screenH;
}
int Metrics::toVirtualX(int w) const{
if(screenW == 0) {
throw megaglest_runtime_error("div by 0 screenW == 0");
}
return w*virtualW/screenW;
}
int Metrics::toVirtualY(int h) const{
if(screenH == 0) {
throw megaglest_runtime_error("div by 0 screenH == 0");
}
//printf("h [%d] virtualH [%d] screenH [%d] result = %d\n",h,virtualH,screenH,(h*virtualH/screenH));
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