/******************************************************************************
This source file is part of AstroMenace game
(Hardcore 3D space shooter with spaceship upgrade possibilities.)
For the latest info, see http://www.viewizard.com/
File name: Menu.cpp
Copyright (c) 2006-2007 Michael Kurinnoy, Viewizard
All Rights Reserved.
File Version: 1.2
******************************************************************************
AstroMenace game source code available under "dual licensing" model.
The licensing options available are:
* Commercial Licensing. This is the appropriate option if you are
creating proprietary applications and you are not prepared to
distribute and share the source code of your application.
Contact us for pricing at viewizard@viewizard.com
* Open Source Licensing. This is the appropriate option if you want
to share the source code of your application with everyone you
distribute it to, and you also want to give them the right to share
who uses it. You should have received a copy of the GNU General Public
License version 3 with this source codes.
If not, see .
******************************************************************************/
#include "../Defines.h"
#include "../Game.h"
//------------------------------------------------------------------------------------
// переменные
//------------------------------------------------------------------------------------
eParticleSystem *psSpace = 0;
extern CSpaceObject *StartSpaceObject;
float LastMenuUpdateTime = 0.0f;
float MenuContentTransp = 0.0f;
float LastMenuOnOffUpdateTime = 0.0f;
float MenuBlackTransp = 0.0f;
bool NeedOnMenu = false;// если нужно выйти из черного
bool NeedOffMenu = false;// если нужно выйти из черного
bool NeedShowMenu = false;
bool NeedHideMenu = false;
eGameStatus NextMenu;
eGameStatus PrevMenu = MAIN_MENU;
float Button1Transp = 1.0f;
float LastButton1UpdateTime = 0.0f;
float Button2Transp = 1.0f;
float LastButton2UpdateTime = 0.0f;
float Button3Transp = 1.0f;
float LastButton3UpdateTime = 0.0f;
float Button4Transp = 1.0f;
float LastButton4UpdateTime = 0.0f;
float Button5Transp = 1.0f;
float LastButton5UpdateTime = 0.0f;
float Button6Transp = 1.0f;
float LastButton6UpdateTime = 0.0f;
float Button7Transp = 1.0f;
float LastButton7UpdateTime = 0.0f;
float Button8Transp = 1.0f;
float LastButton8UpdateTime = 0.0f;
float Button9Transp = 1.0f;
float LastButton9UpdateTime = 0.0f;
float Button10Transp = 1.0f;
float LastButton10UpdateTime = 0.0f;
float Button11Transp = 1.0f;
float LastButton11UpdateTime = 0.0f;
float Button12Transp = 1.0f;
float LastButton12UpdateTime = 0.0f;
float Button13Transp = 1.0f;
float LastButton13UpdateTime = 0.0f;
float Button14Transp = 1.0f;
float LastButton14UpdateTime = 0.0f;
extern eLight * StartLight;
extern eLight * EndLight;
extern float CurrentDemoShowTime;
extern float LastDemoShowTime;
// для прорисовки подложки с тайловой анимацией
extern float StarsTile;
extern float StarsTileUpdateTime;
extern float StarsTile2;
extern float StarsTileUpdateTime2;
extern float StarsTile3;
extern float StarsTileUpdateTime3;
//------------------------------------------------------------------------------------
// инициализация меню
//------------------------------------------------------------------------------------
void InitMenu()
{
CreateCursor();
// установка курсора на центр
// получаем размер клиентской области
int W, H;
vw_GetViewport(0, 0, &W, &H);
float AWw = W*1.0f;
float AHw = H*1.0f;
float ARWidth;
float ARHeight;
bool ARFLAG = vw_GetAspectWH(&ARWidth, &ARHeight);
// установка мышки, чтобы не учитывать перемещения в меню
SDL_WarpMouse((int)((512.0f+256.0f)/(ARWidth/AWw)), (int)(384.0f/(ARHeight/AHw)));
Button1Transp = 1.0f;
LastButton1UpdateTime = 0.0f;
Button2Transp = 1.0f;
LastButton2UpdateTime = 0.0f;
Button3Transp = 1.0f;
LastButton3UpdateTime = 0.0f;
Button4Transp = 1.0f;
LastButton4UpdateTime = 0.0f;
Button5Transp = 1.0f;
LastButton5UpdateTime = 0.0f;
Button6Transp = 1.0f;
LastButton6UpdateTime = 0.0f;
Button7Transp = 1.0f;
LastButton7UpdateTime = 0.0f;
Button8Transp = 1.0f;
LastButton8UpdateTime = 0.0f;
Button9Transp = 1.0f;
LastButton9UpdateTime = 0.0f;
Button10Transp = 1.0f;
LastButton10UpdateTime = 0.0f;
Button11Transp = 1.0f;
LastButton11UpdateTime = 0.0f;
Button12Transp = 1.0f;
LastButton12UpdateTime = 0.0f;
Button13Transp = 1.0f;
LastButton13UpdateTime = 0.0f;
Button14Transp = 1.0f;
LastButton14UpdateTime = 0.0f;
LastMenuUpdateTime = 0.0f;
MenuContentTransp = 0.0f;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// иним камеру, всегда до работы со скриптом (!!!)
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
vw_ResizeScene(45.0f, Setup.fAspectRatioWidth/Setup.fAspectRatioHeight, 1.0f, 10000.0f);
InitGameCamera();
vw_SetCameraLocation(VECTOR3D(-50,30,-50));
vw_SetCameraMoveAroundPoint(VECTOR3D(0,0,0), 0.0f, VECTOR3D(0.0f, 0.0f, 0.0f));
if (Script != 0){delete Script; Script = 0;}
Script = new ScriptEngine;
#ifndef DEMO_VERSION
// делаем случайный выбор, какой скрипт прокручивать
switch (vw_iRandNum(2))
{
case 0: Script->RunScript("DATA/SCRIPT/menu1.xml", vw_GetTime()); break;
case 1: Script->RunScript("DATA/SCRIPT/menu2.xml", vw_GetTime()); break;
case 2: Script->RunScript("DATA/SCRIPT/menu3.xml", vw_GetTime()); break;
// на всякий случай
default: Script->RunScript("DATA/SCRIPT/menu1.xml", vw_GetTime()); break;
}
#else
Script->RunScript("DATA/SCRIPT/menu1.xml", vw_GetTime());
#endif // DEMO_VERSION
// немного прокручиваем скрипт
float Time1 = vw_GetTime();
Script->StartTime = Time1-30;
Script->TimeLastOp = Time1-30;
for (float i=Time1-30; iUpdate(i);
}
Script->StartTime = Time1;
Script->TimeLastOp = Time1;
// активные частицы космоса
psSpace = 0;
if (psSpace==0) psSpace = new eParticleSystem;
psSpace->ColorStart.r = 0.80f;
psSpace->ColorStart.g = 0.80f;
psSpace->ColorStart.b = 1.00f;
psSpace->ColorEnd.r = 0.70f;
psSpace->ColorEnd.g = 0.70f;
psSpace->ColorEnd.b = 1.00f;
psSpace->AlphaStart = 1.00f;
psSpace->AlphaEnd = 0.00f;
psSpace->SizeStart = 0.25f;
psSpace->SizeEnd = 0.50f;
psSpace->Speed = 15.00f;
psSpace->SpeedVar = 5.00f;
psSpace->Theta = 0.00f;
psSpace->Life = 15.00f;
psSpace->LifeVar = 0.00f;
psSpace->CreationType = 1;
psSpace->CreationSize = VECTOR3D(2.0f,50.0f,30.0f);
psSpace->ParticlesPerSec = 60;
psSpace->Texture = vw_FindTextureByName("DATA/GFX/flare3.tga");
psSpace->Direction = VECTOR3D(1.0f, 0.0f, 0.0f);
psSpace->Resize = 0.1f;
psSpace->SetStartLocation(VECTOR3D(-50,10,-20));
// немного "прокручиваем", чтобы сразу по появлению было заполнено
float Time = psSpace->TimeLastUpdate;
for (float i=Time; i