From 0dd135fc1283da642801f3443d503743cad46688 Mon Sep 17 00:00:00 2001 From: Titus Tscharntke Date: Mon, 3 May 2010 22:07:27 +0000 Subject: [PATCH] windowed/fullscreen switch in options ( needed for windows ) watereffect improved for big unnits ( ElimiNator should test it ) --- source/glest_game/graphics/renderer.cpp | 2 +- source/glest_game/menu/menu_state_options.cpp | 24 +++++- source/glest_game/menu/menu_state_options.h | 3 + source/glest_game/world/water_effects.cpp | 69 +++++++++++++++++ source/glest_game/world/water_effects.h | 77 +++++++++++++++++++ source/glest_game/world/world.cpp | 2 +- 6 files changed, 174 insertions(+), 3 deletions(-) create mode 100644 source/glest_game/world/water_effects.cpp create mode 100644 source/glest_game/world/water_effects.h diff --git a/source/glest_game/graphics/renderer.cpp b/source/glest_game/graphics/renderer.cpp index e13ca004..4417d20a 100644 --- a/source/glest_game/graphics/renderer.cpp +++ b/source/glest_game/graphics/renderer.cpp @@ -1658,7 +1658,7 @@ void Renderer::renderWaterEffects(){ Vec2i intPos= Vec2i(static_cast(ws->getPos().x), static_cast(ws->getPos().y)); if(map->getSurfaceCell(Map::toSurfCoords(intPos))->isVisible(world->getThisTeamIndex())){ - float scale= ws->getAnim(); + float scale= ws->getAnim()*ws->getSize(); glColor4f(1.f, 1.f, 1.f, 1.f-ws->getAnim()); glBegin(GL_TRIANGLE_STRIP); diff --git a/source/glest_game/menu/menu_state_options.cpp b/source/glest_game/menu/menu_state_options.cpp index c8c19add..15014d7b 100644 --- a/source/glest_game/menu/menu_state_options.cpp +++ b/source/glest_game/menu/menu_state_options.cpp @@ -160,6 +160,16 @@ MenuStateOptions::MenuStateOptions(Program *program, MainMenu *mainMenu): listBoxScreenModes.setSelectedItem(currentResString); leftline-=30; + + //FullscreenWindowed + labelFullscreenWindowed.init(leftLabelStart, leftline); + listBoxFullscreenWindowed.init(leftColumnStart, leftline, 80); + labelFullscreenWindowed.setText(lang.get("Windowed")); + listBoxFullscreenWindowed.pushBackItem(lang.get("No")); + listBoxFullscreenWindowed.pushBackItem(lang.get("Yes")); + listBoxFullscreenWindowed.setSelectedItemIndex(clamp(config.getBool("Windowed"), false, true)); + leftline-=30; + //filter labelFilter.init(leftLabelStart, leftline); labelFilter.setText(lang.get("Filter")); @@ -279,6 +289,15 @@ void MenuStateOptions::mouseClick(int x, int y, MouseButton mouseButton){ return; } + bool currentFullscreenWindowed=config.getBool("Windowed"); + bool selectedFullscreenWindowed=listBoxFullscreenWindowed.getSelectedItemIndex(); + if(currentFullscreenWindowed!=selectedFullscreenWindowed){ + mainMessageBoxState=1; + Lang &lang= Lang::getInstance(); + showMessageBox(lang.get("RestartNeeded"), lang.get("DisplaySettingsChanged"), false); + return; + } + saveConfig(); mainMenu->setState(new MenuStateRoot(program, mainMenu)); } @@ -308,6 +327,7 @@ void MenuStateOptions::mouseClick(int x, int y, MouseButton mouseButton){ listBoxVolumeMusic.mouseClick(x, y); listBoxScreenModes.mouseClick(x, y); listFontSizeAdjustment.mouseClick(x, y); + listBoxFullscreenWindowed.mouseClick(x, y); } } @@ -402,6 +422,8 @@ void MenuStateOptions::render(){ renderer.renderLabel(&labelServerPort); renderer.renderListBox(&listFontSizeAdjustment); renderer.renderLabel(&labelFontSizeAdjustment); + renderer.renderLabel(&labelFullscreenWindowed); + renderer.renderListBox(&listBoxFullscreenWindowed); } } @@ -421,6 +443,7 @@ void MenuStateOptions::saveConfig(){ int index= listBoxShadows.getSelectedItemIndex(); config.setString("Shadows", Renderer::shadowsToStr(static_cast(index))); + config.setBool("Windowed", listBoxFullscreenWindowed.getSelectedItemIndex()); config.setString("Filter", listBoxFilter.getSelectedItem()); config.setBool("Textures3D", listBoxTextures3D.getSelectedItemIndex()); config.setBool("UnitParticles", listBoxUnitParticles.getSelectedItemIndex()); @@ -431,7 +454,6 @@ void MenuStateOptions::saveConfig(){ CoreData::getInstance().getMenuMusic()->setVolume(strToInt(listBoxVolumeMusic.getSelectedItem())/100.f); config.setString("SoundVolumeMusic", listBoxVolumeMusic.getSelectedItem()); - //just for the moment .... string currentResolution=config.getString("ScreenWidth")+"x"+config.getString("ScreenHeight"); string selectedResolution=listBoxScreenModes.getSelectedItem(); if(currentResolution!=selectedResolution){ diff --git a/source/glest_game/menu/menu_state_options.h b/source/glest_game/menu/menu_state_options.h index 90883e22..96ce9049 100644 --- a/source/glest_game/menu/menu_state_options.h +++ b/source/glest_game/menu/menu_state_options.h @@ -55,6 +55,9 @@ private: GraphicListBox listBoxScreenModes; list modeInfos; + GraphicLabel labelFullscreenWindowed; + GraphicListBox listBoxFullscreenWindowed; + GraphicLabel labelVideoSection; GraphicLabel labelAudioSection; GraphicLabel labelMiscSection; diff --git a/source/glest_game/world/water_effects.cpp b/source/glest_game/world/water_effects.cpp new file mode 100644 index 00000000..c72770b3 --- /dev/null +++ b/source/glest_game/world/water_effects.cpp @@ -0,0 +1,69 @@ +// ============================================================== +// 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 "water_effects.h" + +#include "config.h" +#include "map.h" +#include "leak_dumper.h" + +namespace Glest{ namespace Game{ + +// ===================================================== +// class WaterSplash +// ===================================================== + +WaterSplash::WaterSplash(const Vec2f &pos, int size){ + this->pos= pos; + this->size=1+(size-1)/2; + anim= 0.f; + enabled= true; + +} + +void WaterSplash::update(float amount){ + if(enabled){ + anim+= amount/size; + if(anim>1.f){ + enabled= false; + } + } +} + +// =============================== +// class WaterEffects +// =============================== + +WaterEffects::WaterEffects(){ + anim= 0; +} + +void WaterEffects::update(){ + anim+= 0.5f/GameConstants::updateFps; + if(anim>1.f){ + anim= 0; + } + for(int i=0; i + +#include "vec.h" + +using std::vector; + +using Shared::Graphics::Vec2f; + +namespace Glest{ namespace Game{ + +class Map; + +// ===================================================== +// class WaterSplash +// ===================================================== + +class WaterSplash{ +private: + Vec2f pos; + int size; + float anim; + bool enabled; + +public: + WaterSplash(const Vec2f &pos, int size); + + void update(float amount); + + const Vec2f &getPos() const {return pos;} + const int &getSize() const {return size;} + float getAnim() const {return anim;} + bool getEnabled() const {return enabled;} +}; + +// =============================== +// class WaterEffects +// +/// List of water splashes +// =============================== + +class WaterEffects{ +public: + typedef vector WaterSplashes; + +private: + WaterSplashes waterSplashes; + float anim; + +public: + WaterEffects(); + + void update(); + + float getAmin() const {return anim;} + + void addWaterSplash(const Vec2f &pos, int size); + int getWaterSplashCount() const {return waterSplashes.size();} + const WaterSplash *getWaterSplash(int i) const {return &waterSplashes[i];} +}; + +}}//end namespace + +#endif diff --git a/source/glest_game/world/world.cpp b/source/glest_game/world/world.cpp index 90ad0eca..0495a062 100644 --- a/source/glest_game/world/world.cpp +++ b/source/glest_game/world/world.cpp @@ -334,7 +334,7 @@ void World::moveUnitCells(Unit *unit){ if(map.getSubmerged(map.getCell(unit->getLastPos()))){ for(int i=0; i<3; ++i){ waterEffects.addWaterSplash( - Vec2f(unit->getLastPos().x+random.randRange(-0.4f, 0.4f), unit->getLastPos().y+random.randRange(-0.4f, 0.4f))); + Vec2f(unit->getLastPos().x+random.randRange(-0.4f, 0.4f), unit->getLastPos().y+random.randRange(-0.4f, 0.4f)), unit->getType()->getSize()); } } }