//------------------------------------------------------------------------------------ // покупка-апгрейд корпуса //------------------------------------------------------------------------------------ void Workshop_Shipyard() { // затемнение при выводе int SizeI; RECT SrcRect, DstRect; // затемнение SetRect(&SrcRect,0,0,256,256 ); SetRect(&DstRect,Setup.iAspectRatioWidth/2-480,100-32,Setup.iAspectRatioWidth/2-32,450+32); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/back_spot2.tga"), true, 0.45f*MenuContentTransp); SetRect(&DstRect,Setup.iAspectRatioWidth/2+32,100-32,Setup.iAspectRatioWidth/2+480,450+32); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/back_spot2.tga"), true, 0.45f*MenuContentTransp); vw_End2DMode(); WorkshopDrawShip(WorkshopFighterGame, 3); WorkshopDrawShip(WorkshopNewFighter, 2); vw_Start2DMode(-1,1); // условия, при которых корабль купить можно bool CanBuy = false; if (GetWorkshopShipFullCost(Setup.Profile[CurrentProfile].Ship, WorkshopFighterGame) + Setup.Profile[CurrentProfile].Money >= GetWorkshopShipCost(CurrentWorkshopNewFighter)) CanBuy = true; // на новом корабле vw_DrawFont(Setup.iAspectRatioWidth/2-445, 600, 0, 0, 1.5f, 1.0f,1.0f,1.0f, MenuContentTransp, vw_GetText("7_Ships_Stock")); // вывод названия корабля vw_DrawFont(Setup.iAspectRatioWidth/2-448, 50+6, 0, 0, 1.0f, 1.0f,1.0f,0.0f, MenuContentTransp, vw_GetText("7_shipfullname"), vw_GetText(GetWorkshopShipName(CurrentWorkshopNewFighter)), 1); if (DrawButton128_2(Setup.iAspectRatioWidth/2-197,50, vw_GetText("1_Info"), MenuContentTransp, false)) { SetCurrentDialogBox(6); DialogSpaceShip = WorkshopNewFighter; } // находим смещение, чтобы было красиво int SmSizeI = vw_FontSize(vw_GetText("4_Armor:")); int SmSizeI2 = vw_FontSize(vw_GetText("4_Weapons")); if (SmSizeI < SmSizeI2) SmSizeI = SmSizeI2; vw_DrawFont(Setup.iAspectRatioWidth/2-78-40-SmSizeI, 110, 0, 0, 1.0f, 1.0f,1.0f,1.0f, 0.5f*MenuContentTransp, vw_GetText("4_Armor:")); vw_DrawFont(Setup.iAspectRatioWidth/2-78-vw_FontSize("%i", (int)WorkshopNewFighter->StrengthStart), 110, 0, 0, 1.0f, 1.0f,1.0f,1.0f, 0.5f*MenuContentTransp, "%i", (int)WorkshopNewFighter->StrengthStart); vw_DrawFont(Setup.iAspectRatioWidth/2-78-40-SmSizeI, 130, 0, 0, 1.0f, 1.0f,1.0f,1.0f, 0.5f*MenuContentTransp, "%s:", vw_GetText("4_Weapons")); vw_DrawFont(Setup.iAspectRatioWidth/2-78-vw_FontSize("%i", WorkshopNewFighter->WeaponQuantity), 130, 0, 0, 1.0f, 1.0f,1.0f,1.0f, 0.5f*MenuContentTransp, "%i", WorkshopNewFighter->WeaponQuantity); // вывод стоимости корабля if (CanBuy) vw_DrawFont(Setup.iAspectRatioWidth/2-438, 420, 0, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, "%s: %i", vw_GetText("7_Ship_Hull_Cost"), GetWorkshopShipCost(CurrentWorkshopNewFighter)); else vw_DrawFont(Setup.iAspectRatioWidth/2-438, 420, 0, 0, 1.0f, 1.0f,0.5f,0.0f, CurrentAlert3*MenuContentTransp, "%s: %i", vw_GetText("7_Ship_Hull_Cost"), GetWorkshopShipCost(CurrentWorkshopNewFighter)); // рамки SetRect(&SrcRect,0,0,400,35 ); SetRect(&DstRect,Setup.iAspectRatioWidth/2-457,100-11,Setup.iAspectRatioWidth/2-57,100+35-11); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/workshop_panel4.tga"), true, MenuContentTransp); SetRect(&SrcRect,0,0,400,173 ); SetRect(&DstRect,Setup.iAspectRatioWidth/2-457,450-13,Setup.iAspectRatioWidth/2-57,450+173-13); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/workshop_panel1.tga"), true, MenuContentTransp); if (DrawButton128_2(Setup.iAspectRatioWidth/2-395,482, vw_GetText("1_Prev"), MenuContentTransp, false)) { CurrentWorkshopNewFighter --; if (CurrentWorkshopNewFighter < 1) CurrentWorkshopNewFighter = 22; WorkshopCreateNewShip(); } if (DrawButton128_2(Setup.iAspectRatioWidth/2-247,482, vw_GetText("1_Next"), MenuContentTransp, false)) { CurrentWorkshopNewFighter ++; if (CurrentWorkshopNewFighter > 22) CurrentWorkshopNewFighter = 1; WorkshopCreateNewShip(); } if (DrawButton200_2(Setup.iAspectRatioWidth/2-357,533, vw_GetText("1_Buy_Ship"), MenuContentTransp, !CanBuy)) { BuyShip(); } // на корабле игрока vw_DrawFont(Setup.iAspectRatioWidth/2+445-vw_FontSize(vw_GetText("7_Player_Ship"))*1.5f, 600, 0, 0, 1.5f, 1.0f,1.0f,1.0f, MenuContentTransp, vw_GetText("7_Player_Ship")); // вывод названия корабля vw_DrawFont(Setup.iAspectRatioWidth/2+64, 56, 0, 0, 1.0f, 1.0f,1.0f,0.0f, MenuContentTransp, vw_GetText("7_shipfullname"), vw_GetText(GetWorkshopShipName(Setup.Profile[CurrentProfile].Ship)), Setup.Profile[CurrentProfile].ShipHullUpgrade); if (DrawButton128_2(Setup.iAspectRatioWidth/2+315, 50, vw_GetText("1_Info"), MenuContentTransp, false)) { SetCurrentDialogBox(6); DialogSpaceShip = WorkshopFighterGame; } int LinePos = 420; // вывод стомости модернизации // модернизация корпуса bool CanUpgrade = false; if (Setup.Profile[CurrentProfile].ShipHullUpgrade<4) CanUpgrade = true; if (CanUpgrade) { if (Setup.Profile[CurrentProfile].Money < GetWorkshopShipCost(Setup.Profile[CurrentProfile].Ship)) CanUpgrade = false; if (CanUpgrade) vw_DrawFont(Setup.iAspectRatioWidth/2+438-vw_FontSize("%s: %i", vw_GetText("7_Upgrade_Hull_Cost"), GetWorkshopShipCost(Setup.Profile[CurrentProfile].Ship)), LinePos, 0, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, "%s: %i", vw_GetText("7_Upgrade_Hull_Cost"), GetWorkshopShipCost(Setup.Profile[CurrentProfile].Ship)); else vw_DrawFont(Setup.iAspectRatioWidth/2+438-vw_FontSize("%s: %i", vw_GetText("7_Upgrade_Hull_Cost"), GetWorkshopShipCost(Setup.Profile[CurrentProfile].Ship)), LinePos, 0, 0, 1.0f, 1.0f,0.5f,0.0f, CurrentAlert3*MenuContentTransp, "%s: %i", vw_GetText("7_Upgrade_Hull_Cost"), GetWorkshopShipCost(Setup.Profile[CurrentProfile].Ship)); LinePos -= 20; } // вывод стомости ремонта, если нужно bool NeedRepair = false; if (GetWorkshopShipRepairCost(Setup.Profile[CurrentProfile].Ship, WorkshopFighterGame) > 0) { SizeI = vw_FontSize("%s: %i", vw_GetText("7_Repair_Hull_Cost"), GetWorkshopShipRepairCost(Setup.Profile[CurrentProfile].Ship, WorkshopFighterGame)); vw_DrawFont(Setup.iAspectRatioWidth/2+438-SizeI, LinePos, 0, 0, 1.0f, 1.0f,0.0f,0.0f, CurrentAlert3*MenuContentTransp, "%s: %i", vw_GetText("7_Repair_Hull_Cost"), GetWorkshopShipRepairCost(Setup.Profile[CurrentProfile].Ship, WorkshopFighterGame)); LinePos -= 20; NeedRepair = true; // надпись Armor, красная vw_DrawFont(Setup.iAspectRatioWidth/2+74, 110, 0, 0, 1.0f, 1.0f,1.0f,1.0f, 0.5f*MenuContentTransp, vw_GetText("4_Armor:")); SizeI = vw_FontSize("%i/%i", (int)WorkshopFighterGame->Strength, (int)WorkshopFighterGame->StrengthStart); vw_DrawFont(Setup.iAspectRatioWidth/2+74+14+SmSizeI, 110, 0, 0, 1.0f, 1.0f,0.0f,0.0f, CurrentAlert3*MenuContentTransp, "%i/%i", (int)WorkshopFighterGame->Strength, (int)WorkshopFighterGame->StrengthStart); } else { // надпись Armor, нормальная vw_DrawFont(Setup.iAspectRatioWidth/2+74, 110, 0, 0, 1.0f, 1.0f,1.0f,1.0f, 0.5f*MenuContentTransp, vw_GetText("4_Armor:")); SizeI = vw_FontSize("%i/%i", (int)WorkshopFighterGame->Strength, (int)WorkshopFighterGame->StrengthStart); vw_DrawFont(Setup.iAspectRatioWidth/2+74+14+SmSizeI, 110, 0, 0,1.0f, 1.0f,1.0f,1.0f, 0.5f*MenuContentTransp, "%i/%i", (int)WorkshopFighterGame->Strength, (int)WorkshopFighterGame->StrengthStart); } SizeI = SizeI - vw_FontSize("%i", WorkshopFighterGame->WeaponQuantity); vw_DrawFont(Setup.iAspectRatioWidth/2+74, 130, 0, 0, 1.0f, 1.0f,1.0f,1.0f, 0.5f*MenuContentTransp, "%s:", vw_GetText("4_Weapons")); vw_DrawFont(Setup.iAspectRatioWidth/2+74+14+SmSizeI+SizeI, 130, 0, 0, 1.0f, 1.0f,1.0f,1.0f, 0.5f*MenuContentTransp, "%i", WorkshopFighterGame->WeaponQuantity); // вывод стоимости корабля (со всеми системами) SizeI = vw_FontSize("%s: %i", vw_GetText("7_Ship_Cost"), GetWorkshopShipFullCost(Setup.Profile[CurrentProfile].Ship, WorkshopFighterGame)); vw_DrawFont(Setup.iAspectRatioWidth/2+438-SizeI, LinePos, 0, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, "%s: %i", vw_GetText("7_Ship_Cost"), GetWorkshopShipFullCost(Setup.Profile[CurrentProfile].Ship, WorkshopFighterGame)); // рамки SetRect(&SrcRect,0,0,400,35 ); SetRect(&DstRect,Setup.iAspectRatioWidth/2+57,100-11,Setup.iAspectRatioWidth/2+457,100+35-11); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/workshop_panel4.tga"), true, MenuContentTransp); SetRect(&SrcRect,0,0,400,173 ); SetRect(&DstRect,Setup.iAspectRatioWidth/2+57,450-13,Setup.iAspectRatioWidth/2+457,450+173-13); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/workshop_panel1+.tga"), true, MenuContentTransp); if (DrawButton200_2(Setup.iAspectRatioWidth/2+153, 482, vw_GetText("1_Repair_Hull"), MenuContentTransp, !NeedRepair)) { RepairShip(); } if (DrawButton200_2(Setup.iAspectRatioWidth/2+153, 533, vw_GetText("1_Upgrade_Hull"), MenuContentTransp, !CanUpgrade)) { UpgradeShip(); } // вывод информации SizeI = (Setup.iAspectRatioWidth-vw_FontSize("%s: %i", vw_GetText("3_Money"), Setup.Profile[CurrentProfile].Money)*1.25f)/2; if (CanBuy) vw_DrawFont(SizeI, 630, 0, 0, 1.25f, 1.0f,1.0f,0.0f, MenuContentTransp, "%s: %i", vw_GetText("3_Money"), Setup.Profile[CurrentProfile].Money); else vw_DrawFont(SizeI, 630, 0, 0, 1.25f, 1.0f,0.5f,0.0f, CurrentAlert3*MenuContentTransp, "%s: %i", vw_GetText("3_Money"), Setup.Profile[CurrentProfile].Money); }
//------------------------------------------------------------------------------------ // выбор миссии //------------------------------------------------------------------------------------ void MissionMenu() { // проверка ограничения if (Setup.Profile[CurrentProfile].OpenLevelNum > AllMission-1) Setup.Profile[CurrentProfile].OpenLevelNum = AllMission-1; RECT SrcRect, DstRect; SetRect(&SrcRect,2,2,863-2,484-2); SetRect(&DstRect,Setup.iAspectRatioWidth/2-427,175-15,Setup.iAspectRatioWidth/2-427+863-4,175-15+484-4); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/panel800_444_back.tga"), true, 0.9f*MenuContentTransp); int X1 = Setup.iAspectRatioWidth/2 - 372; int Y1 = 270; // выводим текущий профиль пилота int Size = vw_FontSize("%s: ", vw_GetText("3_Pilot_Profile")); vw_DrawFont(X1, 208+12, 0, 0, 1.0f, 0.0f,1.0f,0.0f, 1.0f*MenuContentTransp, "%s: ", vw_GetText("3_Pilot_Profile")); if (Size+vw_FontSize(Setup.Profile[CurrentProfile].Name) > 500) { vw_DrawFont(X1+Size, 208+12, 0, 500-Size, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, Setup.Profile[CurrentProfile].Name); vw_DrawFont(X1+510, 208+12, 0, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, "..."); } else vw_DrawFont(X1+Size, 208+12, 0, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, Setup.Profile[CurrentProfile].Name); if (DrawButton200_2(X1+616-72, 212, vw_GetText("1_Change_Profile"), MenuContentTransp, false)) { ComBuffer = PROFILE; } // подложка для вывода описания миссий SetRect(&SrcRect,0,0,2,2); SetRect(&DstRect,X1-2,Y1-2,X1+2+710,Y1+2+320); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/blackpoint.tga"), true, 0.2f*MenuContentTransp); SetRect(&DstRect,X1,Y1,X1+710,Y1+320); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/blackpoint.tga"), true, 0.5f*MenuContentTransp); // подсвечиваем выбранный уровень if (CurrentMission != -1) if (StartMission<=CurrentMission && CurrentMission<=EndMission) { int ShowLine = CurrentMission; if (ShowLine>=StartMission) ShowLine -= StartMission; SetRect(&SrcRect,0,0,2,2); SetRect(&DstRect,X1+1,Y1 + 64*ShowLine+1,X1+709,Y1 + 64*ShowLine+63); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/whitepoint.tga"), true, 0.1f*MenuContentTransp); } // выводим миссии текущего листа int TMPSoundOnMissionID = -1; for (int i=StartMission; i<=EndMission; i++) if (AllMission > i) { // если не можем выбирать... if (i > Setup.Profile[CurrentProfile].OpenLevelNum) { SetRect(&SrcRect,0,0,64,64); SetRect(&DstRect,X1+2,Y1+2,X1+62,Y1+62); if (MissionIcon[i] != 0) vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName(MissionIcon[i]), true, 0.3f*MenuContentTransp); if (MissionTitleType[i] == 1) vw_DrawFont(X1+20+64, Y1+9, -610, 0, 1.0f, MissionTitleColorR[i],MissionTitleColorG[i],MissionTitleColorB[i], 0.3f*MenuContentTransp, vw_GetText(MissionTitle[i])); else vw_DrawFont(X1+20+64, Y1+9, -610, 0, 1.0f, MissionTitleColorR[i],MissionTitleColorG[i],MissionTitleColorB[i], 0.3f*MenuContentTransp, MissionTitle[i]); if (MissionDescrType[i] == 1) vw_DrawFont(X1+20+64, Y1+33, -610, 0, 1.0f, MissionDescrColorR[i],MissionDescrColorG[i],MissionDescrColorB[i], 0.3f*MenuContentTransp, vw_GetText(MissionDescr[i])); else vw_DrawFont(X1+20+64, Y1+33, -610, 0, 1.0f, MissionDescrColorR[i],MissionDescrColorG[i],MissionDescrColorB[i], 0.3f*MenuContentTransp, MissionDescr[i]); } SetRect(&DstRect,X1,Y1+1,X1+710,Y1+64); if (i <= Setup.Profile[CurrentProfile].OpenLevelNum) { // работаем с клавиатурой if ((MenuContentTransp >= 0.99f) && !isDialogBoxDrawing()) CurrentActiveMenuElement++; bool InFocusByKeyboard = false; if (CurrentKeyboardSelectMenuElement > 0) { if (CurrentKeyboardSelectMenuElement == CurrentActiveMenuElement) { InFocusByKeyboard = true; } } if ((vw_OnRect(&DstRect) || InFocusByKeyboard) && !isDialogBoxDrawing()) { TMPSoundOnMissionID = i; CurrentCursorStatus = 1; // если только встали - нужно звуком это показать if (SoundOnMissionID != i) { SoundOnMissionID = i; // если задействуем клавиатуру - неиграем тут звук if (CurrentKeyboardSelectMenuElement == 0) Audio_PlaySound2D(5,1.0f); } // если стоим над ним... SetRect(&SrcRect,0,0,64,64); SetRect(&DstRect,X1,Y1,X1+64,Y1+64); if (MissionIcon != 0) vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName(MissionIcon[i]), true, MenuContentTransp); if (MissionTitleType[i] == 1) vw_DrawFont(X1+20+64, Y1+9, -610, 0, 1.0f, MissionTitleColorR[i],MissionTitleColorG[i],MissionTitleColorB[i], MenuContentTransp, vw_GetText(MissionTitle[i])); else vw_DrawFont(X1+20+64, Y1+9, -610, 0, 1.0f, MissionTitleColorR[i],MissionTitleColorG[i],MissionTitleColorB[i], MenuContentTransp, MissionTitle[i]); if (MissionDescrType[i] == 1) vw_DrawFont(X1+20+64, Y1+33, -610, 0, 1.0f, MissionDescrColorR[i],MissionDescrColorG[i],MissionDescrColorB[i], MenuContentTransp, vw_GetText(MissionDescr[i])); else vw_DrawFont(X1+20+64, Y1+33, -610, 0, 1.0f, MissionDescrColorR[i],MissionDescrColorG[i],MissionDescrColorB[i], MenuContentTransp, MissionDescr[i]); if (CurrentMission != i) { SetRect(&SrcRect,0,0,2,2); SetRect(&DstRect,X1+64,Y1+1,X1+709,Y1+63); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/whitepoint.tga"), true, 0.1f*MenuContentTransp); } if (vw_GetWindowLBMouse(true) || (InFocusByKeyboard && (vw_GetKeys(SDLK_KP_ENTER) || vw_GetKeys(SDLK_RETURN)))) { CurrentMission = i; Setup.Profile[CurrentProfile].LastMission = CurrentMission; Audio_PlaySound2D(6,1.0f); if (InFocusByKeyboard) { vw_SetKeys(SDLK_KP_ENTER, false); vw_SetKeys(SDLK_RETURN, false); } } if (vw_GetWindowLBDoubleMouse(true)) { CurrentMission = i; Setup.Profile[CurrentProfile].LastMission = CurrentMission; // если уже играли в эту миссию if (Setup.Profile[CurrentProfile].MissionReplayCount[CurrentMission] > 0) { if (Setup.NeedShowHint[5]) { SetCurrentDialogBox(14); } else { ComBuffer = WORKSHOP; CurrentWorkshop = 3; WorkshopCreate(); } } else { ComBuffer = WORKSHOP; CurrentWorkshop = 3; WorkshopCreate(); } } } else { // если не стоим над ним, но можем выбирать SetRect(&SrcRect,0,0,64,64); SetRect(&DstRect,X1+2,Y1+2,X1+62,Y1+62); if (MissionIcon != 0) vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName(MissionIcon[i]), true, 0.8f*MenuContentTransp); if (MissionTitleType[i] == 1) vw_DrawFont(X1+20+64, Y1+9, -610, 0, 1.0f, MissionTitleColorR[i],MissionTitleColorG[i],MissionTitleColorB[i], 0.8f*MenuContentTransp, vw_GetText(MissionTitle[i])); else vw_DrawFont(X1+20+64, Y1+9, -610, 0, 1.0f, MissionTitleColorR[i],MissionTitleColorG[i],MissionTitleColorB[i], 0.8f*MenuContentTransp, MissionTitle[i]); if (MissionDescrType[i] == 1) vw_DrawFont(X1+20+64, Y1+33, -610, 0, 1.0f, MissionDescrColorR[i],MissionDescrColorG[i],MissionDescrColorB[i], 0.8f*MenuContentTransp, vw_GetText(MissionDescr[i])); else vw_DrawFont(X1+20+64, Y1+33, -610, 0, 1.0f, MissionDescrColorR[i],MissionDescrColorG[i],MissionDescrColorB[i], 0.8f*MenuContentTransp, MissionDescr[i]); } } Y1 += 64; } // если не стоим над профилями - нужно сбросить флаг if (TMPSoundOnMissionID == -1) SoundOnMissionID = -1; Y1 = 270; // стрелки перемещения списка if (DrawListUpButton(X1+718, Y1, MenuContentTransp, !(StartMission > 0))) { StartMission--; EndMission--; } if (DrawListDownButton(X1+718,Y1+320-32, MenuContentTransp, !(StartMission < AllMission-5))) { StartMission++; EndMission++; } // проверяем колесико мышки, если курсор находится над активной частью SetRect(&DstRect,X1,Y1,X1+750,Y1+320); if (vw_OnRect(&DstRect)) { if (vw_GetWheelStatus() != 0 && !isDialogBoxDrawing()) { StartMission += vw_GetWheelStatus(); EndMission += vw_GetWheelStatus(); if (StartMission < 0) { StartMission = 0; EndMission = 4; } if (EndMission > AllMission-1) { EndMission = AllMission-1; StartMission = EndMission-4; } vw_ResetWheelStatus(); } } else if (vw_GetWheelStatus() != 0) { vw_ResetWheelStatus(); } // выводим отображение положени в списке на полоске со стрелками SetRect(&SrcRect,0,0,32,32); SetRect(&DstRect,X1+750-32+4,Y1+32+((320.0f-64)/AllMission)*StartMission,X1+750-4,Y1+32+((320.0f-64)/AllMission)*(EndMission+1)); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/whitepoint.tga"), true, 0.3f*MenuContentTransp); // обработка перетягивания ползунка отображения позиции списка // если стоим на ползунком и нажали кнопку мышки - "захватываем" if (!SliderUnderMouseControl && vw_OnRect(&DstRect) && vw_GetWindowLBMouse(false) && !isDialogBoxDrawing()) { SliderUnderMouseControl = true; Audio_PlaySound2D(2,1.0f); } // если ползунок был захвачен, но уже не над секцией где его можно перетягивать или отпустили мышку - отпускаем RECT DstRect2; SetRect(&DstRect2,X1+750-32+4,Y1+32,X1+750-4,Y1+32+(320.0f-64)); if ((SliderUnderMouseControl && (!vw_OnRect(&DstRect2) || !vw_GetWindowLBMouse(false))) || isDialogBoxDrawing()) { SliderUnderMouseControl = false; } // просто кликнули на зону перетягивания, не на ползунок if (!vw_OnRect(&DstRect) && vw_OnRect(&DstRect2) && vw_GetWindowLBMouse(false) && !isDialogBoxDrawing()) { SliderUnderMouseControl = true; Audio_PlaySound2D(2,1.0f); vw_SetWindowLBMouse(false); } // отображаем курсором, что можно кликать на полосе прокрутки if (vw_OnRect(&DstRect2)) CurrentCursorStatus = 1; // корректируем его положение ползунка согласно положению мышки if (SliderUnderMouseControl) { int MouseX, MouseY; vw_GetMousePos(&MouseX, &MouseY); int SliderNewPosition = (MouseY - Y1-32)/((320.0f-64)/AllMission); StartMission = 0; EndMission = 4; if (SliderNewPosition > 2) { StartMission = SliderNewPosition-2; EndMission = SliderNewPosition+2; if (SliderNewPosition >= AllMission-2) { StartMission = AllMission-5; EndMission = AllMission-1; } } } int X = Setup.iAspectRatioWidth/2 - 284; int Y = 165+100*5; if (DrawButton256(X,Y, vw_GetText("1_MAIN_MENU"), MenuContentTransp, &Button10Transp, &LastButton10UpdateTime)) { ComBuffer = MAIN_MENU; } X = Setup.iAspectRatioWidth/2 + 28; if (DrawButton256(X,Y, vw_GetText("1_NEXT"), MenuContentTransp, &Button11Transp, &LastButton11UpdateTime, !(CurrentMission >= 0))) { // если уже играли в эту миссию if (Setup.Profile[CurrentProfile].MissionReplayCount[CurrentMission] > 0) { if (Setup.NeedShowHint[5]) { SetCurrentDialogBox(14); } else { ComBuffer = WORKSHOP; CurrentWorkshop = 3; WorkshopCreate(); } } else { ComBuffer = WORKSHOP; CurrentWorkshop = 3; WorkshopCreate(); } } }
void OptionsMenu(float ContentTransp, float *ButtonTransp1, float *LastButtonUpdateTime1, float *ButtonTransp2, float *LastButtonUpdateTime2) { RECT SrcRect, DstRect; SetRect(&SrcRect,0,0,2,2); SetRect(&DstRect,0,0,Setup.iAspectRatioWidth,768); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/blackpoint.tga"), true, 0.5f*ContentTransp); int CurrentPos = 0; int X1 = Setup.iAspectRatioWidth/2 - 375; int Y1 = 65; int Prir1 = 55; vw_DrawFont(X1, Y1, -280, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, vw_GetText("3_Music_Volume")); if (DrawButton128_2(X1+300, Y1-6, vw_GetText("1_Decrease"), ContentTransp, !Setup.Music_check || Setup.MusicSw==0)) { Setup.MusicSw--; if (Setup.MusicSw<0) Setup.MusicSw = 0; vw_SetMusicMainVolume(Setup.MusicSw/10.0f); } if (DrawButton128_2(X1+616, Y1-6, vw_GetText("1_Increase"), ContentTransp, !Setup.Music_check || Setup.MusicSw==10)) { Setup.MusicSw++; if (Setup.MusicSw>10) Setup.MusicSw = 10; vw_SetMusicMainVolume(Setup.MusicSw/10.0f); } if (!Setup.Music_check) { int SizeI = (170-vw_FontSize(vw_GetText("3_Not_available")))/2; vw_DrawFont(X1+438+SizeI, Y1, 0, 0, 1.0f, 1.0f,0.5f,0.0f, ContentTransp, vw_GetText("3_Not_available")); } else { for (int i=0; i<10; i++) { SetRect(&SrcRect,0,0,16,32); SetRect(&DstRect,X1+443+16*i,Y1-4,X1+443+16+16*i,Y1+32-4); if (Setup.MusicSw>i) vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/perc.tga"), true, ContentTransp); else vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/perc_none.tga"), true, ContentTransp); } } Y1 += Prir1; vw_DrawFont(X1, Y1, -280, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, vw_GetText("3_Voice_Volume")); if (DrawButton128_2(X1+300, Y1-6, vw_GetText("1_Decrease"), ContentTransp, !Setup.Sound_check || Setup.VoiceSw==0, false)) { Setup.VoiceSw--; if (Setup.VoiceSw<0) Setup.VoiceSw = 0; Audio_SetVoiceMainVolume(Setup.VoiceSw/10.0f); Audio_PlayVoice(1, 1.0f); } if (DrawButton128_2(X1+616, Y1-6, vw_GetText("1_Increase"), ContentTransp, !Setup.Sound_check || Setup.VoiceSw==10, false)) { Setup.VoiceSw++; if (Setup.VoiceSw>10) Setup.VoiceSw = 10; Audio_SetVoiceMainVolume(Setup.VoiceSw/10.0f); Audio_PlayVoice(1, 1.0f); } if (!Setup.Sound_check) { int SizeI = (170-vw_FontSize(vw_GetText("3_Not_available")))/2; vw_DrawFont(X1+438+SizeI, Y1, 0, 0, 1.0f, 1.0f,0.5f,0.0f, ContentTransp, vw_GetText("3_Not_available")); } else { for (int i=0; i<10; i++) { SetRect(&SrcRect,0,0,16,32); SetRect(&DstRect,X1+443+16*i,Y1-4,X1+443+16+16*i,Y1+32-4); if (Setup.VoiceSw>i) vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/perc.tga"), true, ContentTransp); else vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/perc_none.tga"), true, ContentTransp); } } Y1 += Prir1; vw_DrawFont(X1, Y1, -280, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, vw_GetText("3_Sound_Effects_Volume")); if (DrawButton128_2(X1+300, Y1-6, vw_GetText("1_Decrease"), ContentTransp, !Setup.Sound_check || Setup.SoundSw==0)) { Setup.SoundSw--; if (Setup.SoundSw<0) Setup.SoundSw = 0; Audio_SetSound2DMainVolume(Setup.SoundSw/10.0f); } if (DrawButton128_2(X1+616, Y1-6, vw_GetText("1_Increase"), ContentTransp, !Setup.Sound_check || Setup.SoundSw==10)) { Setup.SoundSw++; if (Setup.SoundSw>10) Setup.SoundSw = 10; Audio_SetSound2DMainVolume(Setup.SoundSw/10.0f); } if (!Setup.Sound_check) { int SizeI = (170-vw_FontSize(vw_GetText("3_Not_available")))/2; vw_DrawFont(X1+438+SizeI, Y1, 0, 0, 1.0f, 1.0f,0.5f,0.0f, ContentTransp, vw_GetText("3_Not_available")); } else { for (int i=0; i<10; i++) { SetRect(&SrcRect,0,0,16,32); SetRect(&DstRect,X1+443+16*i,Y1-4,X1+443+16+16*i,Y1+32-4); if (Setup.SoundSw>i) vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/perc.tga"), true, ContentTransp); else vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/perc_none.tga"), true, ContentTransp); } } // проверяем, есть ли вообще полноэкранные разрешения bool CanSwitchToFullScreen = false; for(int i=0; i<VideoModesNum; i++) { if ((VideoModes[i].BPP == 16) | (VideoModes[i].BPP == 24)) { CanSwitchToFullScreen = true; break; } } Y1 += Prir1; if (Options_BPP != 0) CurrentPos = 0; else CurrentPos = 1; vw_DrawFont(X1, Y1, -280, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, vw_GetText("3_Full_Screen")); if (DrawButton128_2(X1+300, Y1-6, vw_GetText("1_Prev"), ContentTransp, !CanSwitchToFullScreen) || DrawButton128_2(X1+616, Y1-6, vw_GetText("1_Next"), ContentTransp, !CanSwitchToFullScreen)) { if (Options_BPP != 0) { Options_BPP = 0; } else { Options_BPP = CurrentVideoMode.BPP; // пробуем просто переключить BPP, проверяем есть ли такое разрешение bool NeedDetectResolution = true; for(int i=0; i<VideoModesNum; i++) { if ((VideoModes[i].W == Options_Width) & (VideoModes[i].H == Options_Height) & (VideoModes[i].BPP == Options_BPP)) { NeedDetectResolution = false; break; } } // находим первый полноэкранный режим в списке if (NeedDetectResolution) for(int i=0; i<VideoModesNum; i++) { if ((VideoModes[i].BPP == 16) | (VideoModes[i].BPP == 24)) { Options_Width = VideoModes[i].W; Options_Height = VideoModes[i].H; Options_BPP = VideoModes[i].BPP; break; } } } } int Size = vw_FontSize(Options_BPP ? vw_GetText("1_On") : vw_GetText("1_Off")); int SizeI = (170-Size)/2; vw_DrawFont(X1+438+SizeI, Y1, 0, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, Options_BPP ? vw_GetText("1_On") : vw_GetText("1_Off")); // находим текущий номер режима в списке int CurrentListNum = 0; for(int i=0; i<VideoModesNum; i++) { if (VideoModes[i].W == Options_Width && VideoModes[i].H == Options_Height && VideoModes[i].BPP == Options_BPP) { CurrentListNum = i; break; } } Y1 += Prir1; if (Options_BPP != 0) CurrentPos = 0; else CurrentPos = 1; vw_DrawFont(X1, Y1, -280, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, vw_GetText(ButtonScreenModeTitle[CurrentPos])); if (DrawButton128_2(X1+300, Y1-6, vw_GetText("1_Prev"), ContentTransp, false)) { CurrentListNum--; // ставим правильный bool check_next = true; while (check_next) { // вышли за предел if (CurrentListNum < 0) CurrentListNum = VideoModesNum-1; if ((VideoModes[CurrentListNum].BPP > 0 && Options_BPP > 0) || (VideoModes[CurrentListNum].BPP == 0 && Options_BPP == 0)) { check_next = false; } else { CurrentListNum--; } } Options_Width = VideoModes[CurrentListNum].W; Options_Height = VideoModes[CurrentListNum].H; Options_BPP = VideoModes[CurrentListNum].BPP; if ((Options_Width*1.0f)/(Options_Height*1.0f) < 1.4f) Options_iAspectRatioWidth = 1024; else Options_iAspectRatioWidth = 1228; } if (DrawButton128_2(X1+616, Y1-6, vw_GetText("1_Next"), ContentTransp, false)) { CurrentListNum++; // ставим правильный bool check_next = true; while (check_next) { // вышли за предел if (CurrentListNum >= VideoModesNum) CurrentListNum = 0; if ((VideoModes[CurrentListNum].BPP > 0 && Options_BPP > 0) || (VideoModes[CurrentListNum].BPP == 0 && Options_BPP == 0)) { check_next = false; } else { CurrentListNum++; } } Options_Width = VideoModes[CurrentListNum].W; Options_Height = VideoModes[CurrentListNum].H; Options_BPP = VideoModes[CurrentListNum].BPP; if ((Options_Width*1.0f)/(Options_Height*1.0f) < 1.4f) Options_iAspectRatioWidth = 1024; else Options_iAspectRatioWidth = 1228; } char VideoModeTitle[32]; if (VideoModes[CurrentListNum].BPP != 0) sprintf(VideoModeTitle, "%ix%i %ibit", VideoModes[CurrentListNum].W, VideoModes[CurrentListNum].H, VideoModes[CurrentListNum].BPP); else sprintf(VideoModeTitle, "%ix%i", VideoModes[CurrentListNum].W, VideoModes[CurrentListNum].H); Size = vw_FontSize(VideoModeTitle); SizeI = (170-Size)/2; vw_DrawFont(X1+438+SizeI, Y1, 0, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, VideoModeTitle); Y1 += Prir1; vw_DrawFont(X1, Y1, -280, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, vw_GetText("3_Aspect_Ration")); if (DrawButton128_2(X1+300, Y1-6, vw_GetText("1_Prev"), ContentTransp, false)) { if (Options_iAspectRatioWidth == 1228) Options_iAspectRatioWidth = 1024; else Options_iAspectRatioWidth = 1228; } if (DrawButton128_2(X1+616, Y1-6, vw_GetText("1_Next"), ContentTransp, false)) { if (Options_iAspectRatioWidth == 1024) Options_iAspectRatioWidth = 1228; else Options_iAspectRatioWidth = 1024; } if (Options_iAspectRatioWidth == 1024) { Size = vw_FontSize(vw_GetText("3_Standard")); SizeI = (170-Size)/2; vw_DrawFont(X1+438+SizeI, Y1, 0, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, vw_GetText("3_Standard")); } else { Size = vw_FontSize(vw_GetText("3_Widescreen")); SizeI = (170-Size)/2; vw_DrawFont(X1+438+SizeI, Y1, 0, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, vw_GetText("3_Widescreen")); } Y1 += Prir1; vw_DrawFont(X1, Y1, -280, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, "VSync (%s)", vw_GetText("3_VSync")); if (DrawButton128_2(X1+300, Y1-6, vw_GetText("1_Prev"), ContentTransp, false) || DrawButton128_2(X1+616, Y1-6, vw_GetText("1_Next"), ContentTransp, false)) if (NeedCheck == 0) { if (Options_VSync == 1) Options_VSync = 0; else Options_VSync = 1; } Size = vw_FontSize(Options_VSync ? vw_GetText("1_On") : vw_GetText("1_Off")); SizeI = (170-Size)/2; vw_DrawFont(X1+438+SizeI, Y1, 0, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, Options_VSync ? vw_GetText("1_On") : vw_GetText("1_Off")); Y1 += Prir1; vw_DrawFont(X1, Y1, -280, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, vw_GetText("3_Brightness")); if (DrawButton128_2(X1+300, Y1-6, vw_GetText("1_Decrease"), ContentTransp, Setup.Brightness<=1)) { Setup.Brightness -= 1; if (Setup.Brightness <= 1) Setup.Brightness = 1; } if (DrawButton128_2(X1+616, Y1-6, vw_GetText("1_Increase"), ContentTransp, Setup.Brightness>=10)) { Setup.Brightness += 1; if (Setup.Brightness >= 10) Setup.Brightness = 10; } for (int i=0; i<10; i++) { SetRect(&SrcRect,0,0,16,32); SetRect(&DstRect,X1+443+16*i,Y1-4,X1+443+16+16*i,Y1+32-4); if (Setup.Brightness>i) vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/perc.tga"), true, ContentTransp); else vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/perc_none.tga"), true, ContentTransp); } int Prir = 100; int X; int Y = 165+Prir*4; X = Setup.iAspectRatioWidth/2 - 366; if (DrawButton200_2(X,Y+28, vw_GetText("1_Advanced"), ContentTransp, false)) { if (GameStatus == GAME) { SetOptionsMenu(OPTIONS_ADVANCED); GameMenuStatus = 3; } else ComBuffer = OPTIONS_ADVANCED; } X = Setup.iAspectRatioWidth/2 - 100; if (DrawButton200_2(X,Y+28, vw_GetText("1_Interface"), ContentTransp, false)) { if (GameStatus == GAME) { SetOptionsMenu(INTERFACE); GameMenuStatus = 4; } else ComBuffer = INTERFACE; } X = Setup.iAspectRatioWidth/2 + 166; if (DrawButton200_2(X,Y+28, vw_GetText("1_Config_Controls"), ContentTransp, false)) { if (GameStatus == GAME) { SetOptionsMenu(CONFCONTROL); GameMenuStatus = 5; } else ComBuffer = CONFCONTROL; } if ((Options_Width == Setup.Width && Options_Height == Setup.Height && Options_BPP == Setup.BPP && Options_VSync == Setup.VSync && Options_iAspectRatioWidth == Setup.iAspectRatioWidth)) { X = (Setup.iAspectRatioWidth - 384)/2; Y = Y+Prir; if (GameStatus == GAME) { if (DrawButton384(X,Y, vw_GetText("1_GAME_MENU"), ContentTransp, ButtonTransp1, LastButtonUpdateTime1)) { GameMenuStatus = 1; } } else { if (DrawButton384(X,Y, vw_GetText("1_MAIN_MENU"), ContentTransp, ButtonTransp1, LastButtonUpdateTime1)) { ComBuffer = MAIN_MENU; } } } else { X = Setup.iAspectRatioWidth/2 - 256 - 38; Y = Y+Prir; if (GameStatus == GAME) { if (DrawButton256(X,Y, vw_GetText("1_GAME_MENU"), ContentTransp, ButtonTransp1, LastButtonUpdateTime1)) { GameMenuStatus = 1; } } else { if (DrawButton256(X,Y, vw_GetText("1_MAIN_MENU"), ContentTransp, ButtonTransp1, LastButtonUpdateTime1)) { ComBuffer = MAIN_MENU; } } X = Setup.iAspectRatioWidth/2 + 38; if (DrawButton256(X,Y, vw_GetText("1_APPLY"), ContentTransp, ButtonTransp2, LastButtonUpdateTime2)) { // проверяем, нужно перегружать или нет if (Options_Width != Setup.Width || Options_Height != Setup.Height || Options_BPP != Setup.BPP || Options_VSync != Setup.VSync || Options_iAspectRatioWidth != Setup.iAspectRatioWidth) { if (GameStatus == GAME) SetCurrentDialogBox(17); else { CanQuit = false; Quit = true; NeedReCreate = true; SaveOptionsMenuTmpData(); } } } } }
void InterfaceMenu(float ContentTransp, float *ButtonTransp1, float *LastButtonUpdateTime1) { RECT SrcRect, DstRect; SetRect(&SrcRect,0,0,2,2); SetRect(&DstRect,0,0,Setup.iAspectRatioWidth,768); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/blackpoint.tga"), true, 0.5f*ContentTransp); int X1 = Setup.iAspectRatioWidth/2 - 375; int Y1 = 65; int Prir1 = 55; // выбор языка меню vw_DrawFont(X1, Y1, -280, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, vw_GetText("3_Menu_Language")); if (DrawButton128_2(X1+300, Y1-6, vw_GetText("1_Prev"), ContentTransp, false)) { Setup.MenuLanguage--; if (Setup.MenuLanguage < 1) Setup.MenuLanguage = 3; ReCreateMenuLanguageEntryLinks(); vw_SetTextLanguage(Setup.MenuLanguage-1); } if (DrawButton128_2(X1+616, Y1-6, vw_GetText("1_Next"), ContentTransp, false)) { Setup.MenuLanguage++; if (Setup.MenuLanguage>3) Setup.MenuLanguage = 1; ReCreateMenuLanguageEntryLinks(); vw_SetTextLanguage(Setup.MenuLanguage-1); } int Size, SizeI; switch (Setup.MenuLanguage) { case 1: Size = vw_FontSize("English"); SizeI = (170-Size)/2; vw_DrawFont(X1+438+SizeI, Y1, 0, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, "English"); break; case 2: Size = vw_FontSize("Deutsch"); SizeI = (170-Size)/2; vw_DrawFont(X1+438+SizeI, Y1, 0, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, "Deutsch"); break; case 3: Size = vw_FontSize("Русский"); SizeI = (170-Size)/2; vw_DrawFont(X1+438+SizeI, Y1, 0, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, "Русский"); break; } // выбор языка голосовых сообщений Y1 += Prir1; vw_DrawFont(X1, Y1, -280, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, vw_GetText("3_Voice_Language")); if (DrawButton128_2(X1+300, Y1-6, vw_GetText("1_Prev"), ContentTransp, false)) { Setup.VoiceLanguage--; if (Setup.VoiceLanguage < 1) Setup.VoiceLanguage = 3; ReCreateVoiceLanguageEntryLinks(); } if (DrawButton128_2(X1+616, Y1-6, vw_GetText("1_Next"), ContentTransp, false)) { Setup.VoiceLanguage++; if (Setup.VoiceLanguage>3) Setup.VoiceLanguage = 1; ReCreateVoiceLanguageEntryLinks(); } switch (Setup.VoiceLanguage) { case 1: Size = vw_FontSize("English"); SizeI = (170-Size)/2; vw_DrawFont(X1+438+SizeI, Y1, 0, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, "English"); break; case 2: Size = vw_FontSize("Deutsch"); SizeI = (170-Size)/2; vw_DrawFont(X1+438+SizeI, Y1, 0, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, "Deutsch"); break; case 3: Size = vw_FontSize("Русский"); SizeI = (170-Size)/2; vw_DrawFont(X1+438+SizeI, Y1, 0, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, "Русский"); break; } // выбор шрифта Y1 += Prir1; vw_DrawFont(X1, Y1, -280, 0, 1.0f, 1.0f,1.0f,1.0f, ContentTransp, vw_GetText("3_Menu_Font")); if (DrawButton128_2(X1+300, Y1-6, vw_GetText("1_Prev"), ContentTransp, Setup.FontNumber <= 0)) { Setup.FontNumber --; if (Setup.FontNumber < 0) Setup.FontNumber = 0; // удаляем все символы и их текстуры vw_ReleaseAllFontCharsWithTextures(); // инициализируем новый шрифт, вызывать vw_ShutdownFont не нужно vw_InitFont(FontList[Setup.FontNumber].FontFileName, 16); vw_GenerateFontChars(256, 256, " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,!?-+\():;%&`'*#$=[]@^{}_~><–—«»“”|абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЧЦШЩЪЫЬЭЮЯ©®ÄÖÜäöüß°§/");
//------------------------------------------------------------------------------------ // прорисовка меню //------------------------------------------------------------------------------------ void DrawMenu() { // делаем плавное появление меню if (NeedShowMenu) { MenuContentTransp = 2.4f*(vw_GetTime()-LastMenuUpdateTime); if (MenuContentTransp >= 1.0f) { MenuContentTransp = 1.0f; NeedShowMenu = false; LastMenuUpdateTime = vw_GetTime(); // выводим подсказку, если нужно if (GameStatus == PROFILE) if (Setup.NeedShowHint[0]) SetCurrentDialogBox(9); if (GameStatus == WORKSHOP) { if (CurrentWorkshop == 1) if (Setup.NeedShowHint[1]) SetCurrentDialogBox(10); if (CurrentWorkshop == 2) if (Setup.NeedShowHint[2]) SetCurrentDialogBox(11); if (CurrentWorkshop == 3) if (Setup.NeedShowHint[3]) SetCurrentDialogBox(12); } if (GameStatus == MISSION) { // проверяем, если в одном из профайлов уже открыли 3 миссии - выводим хинт с пожертвованием bool NeedShowDonate = false; for (int i=0; i<5; i++) { if (Setup.Profile[i].Used) if (Setup.Profile[i].ByMissionExperience[2] > 0) NeedShowDonate = true; } if (NeedShowDonate) if (Setup.NeedShowHint[6]) SetCurrentDialogBox(15); } } } // делаем полавное угасание меню if (NeedHideMenu) { MenuContentTransp = 1.0f - 2.4f*(vw_GetTime() - LastMenuUpdateTime); if (MenuContentTransp <= 0.0f) { MenuContentTransp = 0.0f; SetMenu2(NextMenu); LastMenuUpdateTime = vw_GetTime(); NeedShowMenu = true; NeedHideMenu = false; } } vw_SetCameraMoveAroundPoint(VECTOR3D(0,0,0), 0.0f, VECTOR3D(0.0f, 0.0f, 0.0f)); vw_CameraLookAt(); // всегда первым рисуем скайбокс и "далекое" окружение StarSystemUpdate(); StarSystemDraw(1); // рисуем название игры, чтобы звезды и корабли пролетали перед ним vw_Start2DMode(-1,1); // надпись AstroMenace RECT SrcRect, DstRect; SetRect(&SrcRect,0,0,863,128 ); int StartX = (Setup.iAspectRatioWidth - 863)/2; SetRect(&DstRect,StartX,10,StartX+863,10+128); if (GameStatus != WORKSHOP && GameStatus != INFORMATION && GameStatus != INTERFACE && GameStatus != OPTIONS && GameStatus != CONFCONTROL && GameStatus != OPTIONS_ADVANCED) { vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/astromenace.tga"), true, MenuContentTransp, 0.0f, RI_UL_CORNER, 1.0f, 1.0f, 1.0f); } vw_End2DMode(); // рисуем все 3д объекты DrawAllObject3D(1); // после полной прорисовки делаем обновление данных UpdateAllObject3D(vw_GetTime()); vw_UpdateAllParticleSystems(vw_GetTime()); //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // работаем со скриптом, пока он есть //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (Script != 0) if (!Script->Update(vw_GetTime())) { // удаляем скрипт delete Script; Script = 0; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // переходим в 2д режим для прорисовки всех 2д частей //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ vw_Start2DMode(-1,1); switch(GameStatus) { case MAIN_MENU: MainMenu(); break; case TOP_SCORES: TopScoresMenu(); break; case INTERFACE: InterfaceMenu(MenuContentTransp, &Button10Transp, &LastButton10UpdateTime); break; case OPTIONS: OptionsMenu(MenuContentTransp, &Button10Transp, &LastButton10UpdateTime, &Button11Transp, &LastButton11UpdateTime); break; case OPTIONS_ADVANCED: OptionsAdvMenu(MenuContentTransp, &Button10Transp, &LastButton10UpdateTime, &Button11Transp, &LastButton11UpdateTime); break; case INFORMATION: InformationMenu(); break; case CREDITS: CreditsMenu(); break; case CONFCONTROL: ConfControlMenu(MenuContentTransp, &Button10Transp, &LastButton10UpdateTime); break; case PROFILE: ProfileMenu(); break; case DIFFICULTY: DifficultyMenu(); break; case MISSION: MissionMenu(); break; case WORKSHOP: WorkshopMenu(); break; default: break; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // последнее - вывод версии и копирайта //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Version vw_DrawFont(6, 740, 0, 0, 1.0f, 1.0f,1.0f,1.0f, 0.99f, "%s %s %s %i", vw_GetText("11_Version"), GAME_VERSION, vw_GetText("11_build"), GAME_BUILD); // Copyright int CSize = vw_FontSize("%s © 2007-2012, Viewizard", vw_GetText("11_Copyright")); vw_DrawFont(Setup.iAspectRatioWidth-7-CSize, 740, 0, 0, 1.0f, 1.0f,1.0f,1.0f, 0.99f, "%s © 2007-2012, Viewizard", vw_GetText("11_Copyright")); //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // завершение прорисовки //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ vw_End2DMode(); // если нужно - рисуем в окошке еще одном switch(GameStatus) { case INFORMATION: InformationDrawObject(); break; default: break; } // черное затемнение, если нужно if (NeedOnMenu) { MenuBlackTransp = 1.0f - 2.4f*(vw_GetTime() - LastMenuOnOffUpdateTime); if (MenuBlackTransp <= 0.0f) { MenuBlackTransp = 0.0f; NeedOnMenu = false; LastMenuOnOffUpdateTime = vw_GetTime(); } vw_Start2DMode(-1,1); RECT SrcRect, DstRect; SetRect(&SrcRect,0,0,2,2); SetRect(&DstRect,0,0,Setup.iAspectRatioWidth,768); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/blackpoint.tga"), true, MenuBlackTransp); vw_End2DMode(); } // черное затемнение, если нужно if (NeedOffMenu) { MenuBlackTransp = 2.4f*(vw_GetTime() - LastMenuOnOffUpdateTime); if (MenuBlackTransp >= 1.0f) { MenuBlackTransp = 1.0f; NeedOffMenu = false; LastMenuOnOffUpdateTime = vw_GetTime(); // переход на игру WorkshopDestroyData(); ComBuffer = GAME; } vw_Start2DMode(-1,1); RECT SrcRect, DstRect; SetRect(&SrcRect,0,0,2,2); SetRect(&DstRect,0,0,Setup.iAspectRatioWidth,768); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/blackpoint.tga"), true, MenuBlackTransp); vw_End2DMode(); } }
//------------------------------------------------------------------------------------ // покупка-установка систем корабля //------------------------------------------------------------------------------------ void Workshop_Workshop() { RECT SrcRect, DstRect; SetRect(&SrcRect,0,0,256,256); SetRect(&DstRect,Setup.iAspectRatioWidth/2-256,0,Setup.iAspectRatioWidth/2-256+512,412); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/back_spot.tga"), true, 0.35f*MenuContentTransp); vw_End2DMode(); WorkshopDrawShip(WorkshopFighterGame, 1); vw_Start2DMode(-1,1); SetRect(&SrcRect,0,0,210,600); SetRect(&DstRect,Setup.iAspectRatioWidth/2-492,50-10,Setup.iAspectRatioWidth/2-492+210,50+600-10); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/workshop_panel2.tga"), true, MenuContentTransp); // стрелки SetRect(&SrcRect,0,0,74,120); SetRect(&DstRect,Setup.iAspectRatioWidth/2-461,494,Setup.iAspectRatioWidth/2-461+74,494+120); int MouseX, MouseY; vw_GetMousePos(&MouseX, &MouseY); if (((DstRect.right-8 >= MouseX)& (DstRect.left+8<= MouseX)& (DstRect.bottom-10 >= MouseY)& (DstRect.top+10<= MouseY)) && !isDialogBoxDrawing()) { if (NeedPlayWorkshopOnButtonSoundX != DstRect.left || NeedPlayWorkshopOnButtonSoundY != DstRect.top) { Audio_PlaySound2D(1,1.0f); NeedPlayWorkshopOnButtonSoundX = DstRect.left; NeedPlayWorkshopOnButtonSoundY = DstRect.top; } CurrentCursorStatus = 1; if (vw_GetWindowLBMouse(true)) { Audio_PlaySound2D(2,1.0f); CurrentSystemStockNum = GetPrevSystemStockNum(); } vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/arrows_on.tga"), true, MenuContentTransp); } else { if (NeedPlayWorkshopOnButtonSoundX == DstRect.left && NeedPlayWorkshopOnButtonSoundY == DstRect.top) { NeedPlayWorkshopOnButtonSoundX = 0; NeedPlayWorkshopOnButtonSoundY = 0; } vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/arrows_off.tga"), true, MenuContentTransp); } SetRect(&SrcRect,74,0,148,120); SetRect(&DstRect,Setup.iAspectRatioWidth/2-461+74,494,Setup.iAspectRatioWidth/2-461+148,494+120); if (((DstRect.right-8 >= MouseX)& (DstRect.left+8<= MouseX)& (DstRect.bottom-10 >= MouseY)& (DstRect.top+10<= MouseY)) && !isDialogBoxDrawing()) { if (NeedPlayWorkshopOnButtonSoundX != DstRect.left || NeedPlayWorkshopOnButtonSoundY != DstRect.top) { Audio_PlaySound2D(1,1.0f); NeedPlayWorkshopOnButtonSoundX = DstRect.left; NeedPlayWorkshopOnButtonSoundY = DstRect.top; } CurrentCursorStatus = 1; if (vw_GetWindowLBMouse(true)) { Audio_PlaySound2D(2,1.0f); CurrentSystemStockNum = GetNextSystemStockNum(); } vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/arrows_on.tga"), true, MenuContentTransp); } else { if (NeedPlayWorkshopOnButtonSoundX == DstRect.left && NeedPlayWorkshopOnButtonSoundY == DstRect.top) { NeedPlayWorkshopOnButtonSoundX = 0; NeedPlayWorkshopOnButtonSoundY = 0; } vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/arrows_off.tga"), true, MenuContentTransp); } // выводим иконки систем в магазине, по которым тоже можно кликать SetRect(&SrcRect,0,0,128,128); SetRect(&DstRect,Setup.iAspectRatioWidth/2-436,50+20+5-5,Setup.iAspectRatioWidth/2-338,50+128-20+5+5); if (vw_OnRect(&DstRect) && !isDialogBoxDrawing()) { if (NeedPlayWorkshopOnButtonSoundX != DstRect.left || NeedPlayWorkshopOnButtonSoundY != DstRect.top) { Audio_PlaySound2D(1,1.0f); NeedPlayWorkshopOnButtonSoundX = DstRect.left; NeedPlayWorkshopOnButtonSoundY = DstRect.top; } CurrentCursorStatus = 1; if (vw_GetWindowLBMouse(true)) { CurrentSystemStockNum = GetPrevSystemStockNum(); Audio_PlaySound2D(2,1.0f); } vw_DrawTransparent(&DstRect, &SrcRect, GetSystemIcon(GetPrevSystemStockNum()), true, MenuContentTransp); int Size = vw_FontSize(vw_GetText(GetSystemName(GetPrevSystemStockNum()))); float WScale = 0; if (Size > 128) { Size = 128; WScale = -128; } vw_DrawFont(DstRect.left+(DstRect.right-DstRect.left-Size)/2, DstRect.bottom-20, WScale, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, vw_GetText(GetSystemName(GetPrevSystemStockNum()))); } else { if (NeedPlayWorkshopOnButtonSoundX == DstRect.left && NeedPlayWorkshopOnButtonSoundY == DstRect.top) { NeedPlayWorkshopOnButtonSoundX = 0; NeedPlayWorkshopOnButtonSoundY = 0; } vw_DrawTransparent(&DstRect, &SrcRect, GetSystemIcon(GetPrevSystemStockNum()), true, 0.35f*MenuContentTransp); int Size = vw_FontSize(vw_GetText(GetSystemName(GetPrevSystemStockNum()))); float WScale = 0; if (Size > 128) { Size = 128; WScale = -128; } vw_DrawFont(DstRect.left+(DstRect.right-DstRect.left-Size)/2, DstRect.bottom-20, WScale, 0, 1.0f, 1.0f,1.0f,1.0f, 0.35f*MenuContentTransp, vw_GetText(GetSystemName(GetPrevSystemStockNum()))); } SetRect(&SrcRect,0,0,128,128); SetRect(&DstRect,Setup.iAspectRatioWidth/2-451,55+128+20,Setup.iAspectRatioWidth/2-451+128,55+128+128+20); vw_DrawTransparent(&DstRect, &SrcRect, GetSystemIcon(CurrentSystemStockNum), true, MenuContentTransp); int Size = vw_FontSize(vw_GetText(GetSystemName(CurrentSystemStockNum))); float WScale = 0; if (Size > 128) { Size = 128; WScale = -128; } vw_DrawFont(DstRect.left+(DstRect.right-DstRect.left-Size)/2, DstRect.bottom-20, WScale, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, vw_GetText(GetSystemName(CurrentSystemStockNum))); if (vw_OnRect(&DstRect) && !isDialogBoxDrawing()) CurrentCursorStatus = 1; SetRect(&SrcRect,0,0,128,128); SetRect(&DstRect,Setup.iAspectRatioWidth/2-451+20-5,60+20+256+40-5-5,Setup.iAspectRatioWidth/2-451+128-20+5,60-20+128+256+40-5 +5); if (vw_OnRect(&DstRect) && !isDialogBoxDrawing()) { if (NeedPlayWorkshopOnButtonSoundX != DstRect.left || NeedPlayWorkshopOnButtonSoundY != DstRect.top) { Audio_PlaySound2D(1,1.0f); NeedPlayWorkshopOnButtonSoundX = DstRect.left; NeedPlayWorkshopOnButtonSoundY = DstRect.top; } CurrentCursorStatus = 1; if (vw_GetWindowLBMouse(true)) { Audio_PlaySound2D(2,1.0f); CurrentSystemStockNum = GetNextSystemStockNum(); } vw_DrawTransparent(&DstRect, &SrcRect, GetSystemIcon(GetNextSystemStockNum()), true, MenuContentTransp); int Size = vw_FontSize(vw_GetText(GetSystemName(GetNextSystemStockNum()))); float WScale = 0; if (Size > 128) { Size = 128; WScale = -128; } vw_DrawFont(DstRect.left+(DstRect.right-DstRect.left-Size)/2, DstRect.bottom-20, WScale, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, vw_GetText(GetSystemName(GetNextSystemStockNum()))); } else { if (NeedPlayWorkshopOnButtonSoundX == DstRect.left && NeedPlayWorkshopOnButtonSoundY == DstRect.top) { NeedPlayWorkshopOnButtonSoundX = 0; NeedPlayWorkshopOnButtonSoundY = 0; } vw_DrawTransparent(&DstRect, &SrcRect, GetSystemIcon(GetNextSystemStockNum()), true, 0.35f*MenuContentTransp); int Size = vw_FontSize(vw_GetText(GetSystemName(GetNextSystemStockNum()))); float WScale = 0; if (Size > 128) { Size = 128; WScale = -128; } vw_DrawFont(DstRect.left+(DstRect.right-DstRect.left-Size)/2, DstRect.bottom-20, WScale, 0, 1.0f, 1.0f,1.0f,1.0f, 0.35f*MenuContentTransp, vw_GetText(GetSystemName(GetNextSystemStockNum()))); } vw_DrawFont(Setup.iAspectRatioWidth/2-475, 630, 0, 0, 1.5f, 1.0f,1.0f,1.0f, MenuContentTransp, vw_GetText("7_System_Stock")); SetRect(&SrcRect,0,0,210,600); SetRect(&DstRect,Setup.iAspectRatioWidth/2+282,50-10,Setup.iAspectRatioWidth/2+492,50+600-10); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/workshop_panel2+.tga"), true, MenuContentTransp); // проверяем, а все ли нормально с энергией... если не нормально, будем моргать и выведем соотв. надпись bool NeedMoreEnergy = false; if (Setup.Profile[CurrentProfile].PowerSystem != 0) { float Have = GetShipRechargeEnergy(Setup.Profile[CurrentProfile].PowerSystem); float Need = 0.0f; // если это не аркадный режим, нужно учитывать двигатель if (Setup.Profile[CurrentProfile].SpaceShipControlMode != 1) if (Setup.Profile[CurrentProfile].EngineSystem != 0) Need += GetShipEngineSystemEnergyUse(Setup.Profile[CurrentProfile].EngineSystem); // если есть спец система, ее нужно тоже учитывать if (Setup.Profile[CurrentProfile].AdvancedProtectionSystem != 0) Need += GetShipProtectionSystemEnergyUse(Setup.Profile[CurrentProfile].AdvancedProtectionSystem); // слабый реактор if (Need >= Have) NeedMoreEnergy = true; } else { // у нас вообще нет реактора... караул!!! NeedMoreEnergy = true; } // выводим информационную надпись + голосовое сообщение if (NeedMoreEnergy) { // запускаем голос... if (vw_FindSoundByNum(VoiceNeedMoreEnergy) == 0) { // уже не играем, нужно запустить опять VoiceNeedMoreEnergy = Audio_PlayVoice(6, 1.0f); } // вывод текста int SizeI = (Setup.iAspectRatioWidth-vw_FontSize(vw_GetText("9_14Line1")))/2; vw_DrawFont(SizeI, 60, 0, 0, 1.0f, 1.0f,0.0f,0.0f, CurrentAlert3*MenuContentTransp, vw_GetText("9_14Line1")); SizeI = (Setup.iAspectRatioWidth-vw_FontSize(vw_GetText("9_14Line2")))/2; vw_DrawFont(SizeI, 80, 0, 0, 1.0f, 1.0f,0.0f,0.0f, CurrentAlert3*MenuContentTransp, vw_GetText("9_14Line2")); SizeI = (Setup.iAspectRatioWidth-vw_FontSize(vw_GetText("9_14Line3")))/2; vw_DrawFont(SizeI, 100, 0, 0, 1.0f, 1.0f,0.0f,0.0f, CurrentAlert3*MenuContentTransp, vw_GetText("9_14Line3")); } // сбор данных float Current = 0.5f; int Cost = 0; bool CanSell = false; bool CanBuy = true; // Engine SetRect(&DstRect,Setup.iAspectRatioWidth/2+337,70,Setup.iAspectRatioWidth/2+437,70+100); if (CurrentSystemStockNum>=1 && CurrentSystemStockNum<=4) { if (Setup.Profile[CurrentProfile].EngineSystem != 0) { CanSell = true; Cost = GetSystemCost(Setup.Profile[CurrentProfile].EngineSystem); if (Cost + Setup.Profile[CurrentProfile].Money < GetSystemCost(CurrentSystemStockNum)) CanBuy = false; } else { if (Setup.Profile[CurrentProfile].Money < GetSystemCost(CurrentSystemStockNum)) CanBuy = false; } } // Power SetRect(&DstRect,Setup.iAspectRatioWidth/2+337,180,Setup.iAspectRatioWidth/2+437,180+100); if (CurrentSystemStockNum>=5 && CurrentSystemStockNum<=8) { if (Setup.Profile[CurrentProfile].PowerSystem != 0) { CanSell = true; Cost = GetSystemCost(Setup.Profile[CurrentProfile].PowerSystem+4); if (Cost + Setup.Profile[CurrentProfile].Money < GetSystemCost(CurrentSystemStockNum)) CanBuy = false; } else { if (Setup.Profile[CurrentProfile].Money < GetSystemCost(CurrentSystemStockNum)) CanBuy = false; } } // Target SetRect(&DstRect,Setup.iAspectRatioWidth/2+337,290,Setup.iAspectRatioWidth/2+437,290+100); if (CurrentSystemStockNum>=9 && CurrentSystemStockNum<=12) { if (Setup.Profile[CurrentProfile].TargetingSystem != 0) { CanSell = true; Cost = GetSystemCost(Setup.Profile[CurrentProfile].TargetingSystem+8); if (Cost + Setup.Profile[CurrentProfile].Money < GetSystemCost(CurrentSystemStockNum)) CanBuy = false; } else { if (Setup.Profile[CurrentProfile].Money < GetSystemCost(CurrentSystemStockNum)) CanBuy = false; } } // Mech SetRect(&DstRect,Setup.iAspectRatioWidth/2+337,400,Setup.iAspectRatioWidth/2+437,400+100); if (CurrentSystemStockNum>=13 && CurrentSystemStockNum<=16) { if (Setup.Profile[CurrentProfile].TargetingMechanicSystem != 0) { CanSell = true; Cost = GetSystemCost(Setup.Profile[CurrentProfile].TargetingMechanicSystem+12); if (Cost + Setup.Profile[CurrentProfile].Money < GetSystemCost(CurrentSystemStockNum)) CanBuy = false; } else { if (Setup.Profile[CurrentProfile].Money < GetSystemCost(CurrentSystemStockNum)) CanBuy = false; } } // Protect SetRect(&DstRect,Setup.iAspectRatioWidth/2+337,510,Setup.iAspectRatioWidth/2+437,510+100); if (CurrentSystemStockNum>=17 && CurrentSystemStockNum<=20) { if (Setup.Profile[CurrentProfile].AdvancedProtectionSystem != 0) { CanSell = true; Cost = GetSystemCost(Setup.Profile[CurrentProfile].AdvancedProtectionSystem+16); if (Cost + Setup.Profile[CurrentProfile].Money < GetSystemCost(CurrentSystemStockNum)) CanBuy = false; } else { if (Setup.Profile[CurrentProfile].Money < GetSystemCost(CurrentSystemStockNum)) CanBuy = false; } } // прорисовка // Engine SetRect(&SrcRect,0,0,128,128); SetRect(&DstRect,Setup.iAspectRatioWidth/2+337,70,Setup.iAspectRatioWidth/2+437,70+100); Current = 0.5f; float ColorR, ColorG, ColorB; ColorR = ColorG = ColorB = 1.0f; if (NeedMoreEnergy && Setup.Profile[CurrentProfile].EngineSystem != 0 && Setup.Profile[CurrentProfile].SpaceShipControlMode != 1) { ColorR = 1.0f; ColorG = 0.0f; ColorB = 0.0f; } if (CurrentSystemStockNum>=1 && CurrentSystemStockNum<=4) { if (!NeedMoreEnergy || Setup.Profile[CurrentProfile].EngineSystem == 0 || Setup.Profile[CurrentProfile].SpaceShipControlMode == 1) { if (CanBuy) {ColorR = 0.0f; ColorG = 0.8f; ColorB = 0.0f;} else {ColorR = 1.0f; ColorG = 0.5f; ColorB = 0.0f;} } Current = 1.0f; } if (vw_OnRect(&DstRect) && !isDialogBoxDrawing()) { if (NeedPlayWorkshopOnButtonSoundX != DstRect.left || NeedPlayWorkshopOnButtonSoundY != DstRect.top) { Audio_PlaySound2D(1,1.0f); NeedPlayWorkshopOnButtonSoundX = DstRect.left; NeedPlayWorkshopOnButtonSoundY = DstRect.top; } Current = 1.0f; CurrentCursorStatus = 1; if (vw_GetWindowLBMouse(true)) { CurrentSystemStockNum = 1; Audio_PlaySound2D(2,1.0f); } } else { if (NeedPlayWorkshopOnButtonSoundX == DstRect.left && NeedPlayWorkshopOnButtonSoundY == DstRect.top) { NeedPlayWorkshopOnButtonSoundX = 0; NeedPlayWorkshopOnButtonSoundY = 0; } } if (Setup.Profile[CurrentProfile].EngineSystem <= 0) { vw_DrawTransparent(&DstRect, &SrcRect, GetSystemIcon(-4), true, Current*MenuContentTransp); int Size = vw_FontSize(vw_GetText("3_empty")); float WScale = 0; if (Size > 128) { Size = 128; WScale = -128; } vw_DrawFont(DstRect.left+(DstRect.right-DstRect.left-Size)/2, DstRect.top-4, WScale, 0, 1.0f, ColorR,ColorG,ColorB, Current*MenuContentTransp, vw_GetText("3_empty")); Size = vw_FontSize(vw_GetText("4_Spaceship_Engine")); WScale = 0; if (Size > 128) { Size = 128; WScale = -128; } vw_DrawFont(DstRect.left+(DstRect.right-DstRect.left-Size)/2, DstRect.bottom-20, WScale, 0, 1.0f, ColorR,ColorG,ColorB, Current*MenuContentTransp, vw_GetText("4_Spaceship_Engine")); } else { vw_DrawTransparent(&DstRect, &SrcRect, GetSystemIcon(Setup.Profile[CurrentProfile].EngineSystem), true, Current*MenuContentTransp); int Size = vw_FontSize(vw_GetText(GetSystemName(Setup.Profile[CurrentProfile].EngineSystem))); float WScale = 0; if (Size > 128) { Size = 128; WScale = -128; } vw_DrawFont(DstRect.left+(DstRect.right-DstRect.left-Size)/2, DstRect.bottom-70, WScale, 0, 1.0f, ColorR,ColorG,ColorB, Current*MenuContentTransp, vw_GetText(GetSystemName(Setup.Profile[CurrentProfile].EngineSystem))); } // Power SetRect(&DstRect,Setup.iAspectRatioWidth/2+337,180,Setup.iAspectRatioWidth/2+437,180+100); ColorR = ColorG = ColorB = 1.0f; if (NeedMoreEnergy) { ColorR = 1.0f; ColorG = 0.0f; ColorB = 0.0f; } Current = 0.5f; if (CurrentSystemStockNum>=5 && CurrentSystemStockNum<=8) { if (!NeedMoreEnergy) { if (CanBuy) {ColorR = 0.0f; ColorG = 0.8f; ColorB = 0.0f;} else {ColorR = 1.0f; ColorG = 0.5f; ColorB = 0.0f;} } Current = 1.0f; } if (vw_OnRect(&DstRect) && !isDialogBoxDrawing()) { if (NeedPlayWorkshopOnButtonSoundX != DstRect.left || NeedPlayWorkshopOnButtonSoundY != DstRect.top) { Audio_PlaySound2D(1,1.0f); NeedPlayWorkshopOnButtonSoundX = DstRect.left; NeedPlayWorkshopOnButtonSoundY = DstRect.top; } Current = 1.0f; CurrentCursorStatus = 1; if (vw_GetWindowLBMouse(true)) { CurrentSystemStockNum = 5; Audio_PlaySound2D(2,1.0f); } } else { if (NeedPlayWorkshopOnButtonSoundX == DstRect.left && NeedPlayWorkshopOnButtonSoundY == DstRect.top) { NeedPlayWorkshopOnButtonSoundX = 0; NeedPlayWorkshopOnButtonSoundY = 0; } } if (Setup.Profile[CurrentProfile].PowerSystem <= 0) { vw_DrawTransparent(&DstRect, &SrcRect, GetSystemIcon(-2), true, Current*MenuContentTransp); int Size = vw_FontSize(vw_GetText("3_empty")); float WScale = 0; if (Size > 128) { Size = 128; WScale = -128; } vw_DrawFont(DstRect.left+(DstRect.right-DstRect.left-Size)/2, DstRect.top-4, WScale, 0, 1.0f, ColorR,ColorG,ColorB, Current*MenuContentTransp, vw_GetText("3_empty")); Size = vw_FontSize(vw_GetText("4_Power_Source")); WScale = 0; if (Size > 128) { Size = 128; WScale = -128; } vw_DrawFont(DstRect.left+(DstRect.right-DstRect.left-Size)/2, DstRect.bottom-20, WScale, 0, 1.0f, ColorR,ColorG,ColorB, Current*MenuContentTransp, vw_GetText("4_Power_Source")); } else { vw_DrawTransparent(&DstRect, &SrcRect, GetSystemIcon(Setup.Profile[CurrentProfile].PowerSystem+4), true, Current*MenuContentTransp); int Size = vw_FontSize(vw_GetText(GetSystemName(Setup.Profile[CurrentProfile].PowerSystem+4))); float WScale = 0; if (Size > 128) { Size = 128; WScale = -128; } vw_DrawFont(DstRect.left+(DstRect.right-DstRect.left-Size)/2, DstRect.bottom-70, WScale, 0, 1.0f, ColorR,ColorG,ColorB, Current*MenuContentTransp, vw_GetText(GetSystemName(Setup.Profile[CurrentProfile].PowerSystem+4))); } // Target SetRect(&DstRect,Setup.iAspectRatioWidth/2+337,290,Setup.iAspectRatioWidth/2+437,290+100); ColorR = ColorG = ColorB = 1.0f; Current = 0.5f; if (CurrentSystemStockNum>=9 && CurrentSystemStockNum<=12) { if (CanBuy) {ColorR = 0.0f; ColorG = 0.8f; ColorB = 0.0f;} else {ColorR = 1.0f; ColorG = 0.5f; ColorB = 0.0f;} Current = 1.0f; } if (vw_OnRect(&DstRect) && !isDialogBoxDrawing()) { if (NeedPlayWorkshopOnButtonSoundX != DstRect.left || NeedPlayWorkshopOnButtonSoundY != DstRect.top) { Audio_PlaySound2D(1,1.0f); NeedPlayWorkshopOnButtonSoundX = DstRect.left; NeedPlayWorkshopOnButtonSoundY = DstRect.top; } Current = 1.0f; CurrentCursorStatus = 1; if (vw_GetWindowLBMouse(true)) { CurrentSystemStockNum = 9; Audio_PlaySound2D(2,1.0f); } } else { if (NeedPlayWorkshopOnButtonSoundX == DstRect.left && NeedPlayWorkshopOnButtonSoundY == DstRect.top) { NeedPlayWorkshopOnButtonSoundX = 0; NeedPlayWorkshopOnButtonSoundY = 0; } } if (Setup.Profile[CurrentProfile].TargetingSystem <= 0) { vw_DrawTransparent(&DstRect, &SrcRect, GetSystemIcon(-1), true, Current*MenuContentTransp); int Size = vw_FontSize(vw_GetText("3_empty")); float WScale = 0; if (Size > 128) { Size = 128; WScale = -128; } vw_DrawFont(DstRect.left+(DstRect.right-DstRect.left-Size)/2, DstRect.top-4, WScale, 0, 1.0f, ColorR,ColorG,ColorB, Current*MenuContentTransp, vw_GetText("3_empty")); Size = vw_FontSize(vw_GetText("4_Optical_Computer")); WScale = 0; if (Size > 128) { Size = 128; WScale = -128; } vw_DrawFont(DstRect.left+(DstRect.right-DstRect.left-Size)/2, DstRect.bottom-20, WScale, 0, 1.0f, ColorR,ColorG,ColorB, Current*MenuContentTransp, vw_GetText("4_Optical_Computer")); } else { vw_DrawTransparent(&DstRect, &SrcRect, GetSystemIcon(Setup.Profile[CurrentProfile].TargetingSystem+8), true, Current*MenuContentTransp); int Size = vw_FontSize(vw_GetText(GetSystemName(Setup.Profile[CurrentProfile].TargetingSystem+8))); float WScale = 0; if (Size > 128) { Size = 128; WScale = -128; } vw_DrawFont(DstRect.left+(DstRect.right-DstRect.left-Size)/2, DstRect.bottom-70, WScale, 0, 1.0f, ColorR,ColorG,ColorB, Current*MenuContentTransp, vw_GetText(GetSystemName(Setup.Profile[CurrentProfile].TargetingSystem+8))); } // Mech SetRect(&DstRect,Setup.iAspectRatioWidth/2+337,400,Setup.iAspectRatioWidth/2+437,400+100); ColorR = ColorG = ColorB = 1.0f; Current = 0.5f; if (CurrentSystemStockNum>=13 && CurrentSystemStockNum<=16) { if (CanBuy) {ColorR = 0.0f; ColorG = 0.8f; ColorB = 0.0f;} else {ColorR = 1.0f; ColorG = 0.5f; ColorB = 0.0f;} Current = 1.0f; } if (vw_OnRect(&DstRect) && !isDialogBoxDrawing()) { if (NeedPlayWorkshopOnButtonSoundX != DstRect.left || NeedPlayWorkshopOnButtonSoundY != DstRect.top) { Audio_PlaySound2D(1,1.0f); NeedPlayWorkshopOnButtonSoundX = DstRect.left; NeedPlayWorkshopOnButtonSoundY = DstRect.top; } Current = 1.0f; CurrentCursorStatus = 1; if (vw_GetWindowLBMouse(true)) { Audio_PlaySound2D(2,1.0f); CurrentSystemStockNum = 13; } } else { if (NeedPlayWorkshopOnButtonSoundX == DstRect.left && NeedPlayWorkshopOnButtonSoundY == DstRect.top) { NeedPlayWorkshopOnButtonSoundX = 0; NeedPlayWorkshopOnButtonSoundY = 0; } } if (Setup.Profile[CurrentProfile].TargetingMechanicSystem <= 0) { vw_DrawTransparent(&DstRect, &SrcRect, GetSystemIcon(-3), true, Current*MenuContentTransp); int Size = vw_FontSize(vw_GetText("3_empty")); float WScale = 0; if (Size > 128) { Size = 128; WScale = -128; } vw_DrawFont(DstRect.left+(DstRect.right-DstRect.left-Size)/2, DstRect.top-4, WScale, 0, 1.0f, ColorR,ColorG,ColorB, Current*MenuContentTransp, vw_GetText("3_empty")); Size = vw_FontSize(vw_GetText("4_Targeting_System")); WScale = 0; if (Size > 128) { Size = 128; WScale = -128; } vw_DrawFont(DstRect.left+(DstRect.right-DstRect.left-Size)/2, DstRect.bottom-20, WScale, 0, 1.0f, ColorR,ColorG,ColorB, Current*MenuContentTransp, vw_GetText("4_Targeting_System")); } else { vw_DrawTransparent(&DstRect, &SrcRect, GetSystemIcon(Setup.Profile[CurrentProfile].TargetingMechanicSystem+12), true, Current*MenuContentTransp); int Size = vw_FontSize(vw_GetText(GetSystemName(Setup.Profile[CurrentProfile].TargetingMechanicSystem+12))); float WScale = 0; if (Size > 128) { Size = 128; WScale = -128; } vw_DrawFont(DstRect.left+(DstRect.right-DstRect.left-Size)/2, DstRect.bottom-70, WScale, 0, 1.0f, ColorR,ColorG,ColorB, Current*MenuContentTransp, vw_GetText(GetSystemName(Setup.Profile[CurrentProfile].TargetingMechanicSystem+12))); } // Protect SetRect(&DstRect,Setup.iAspectRatioWidth/2+337,510,Setup.iAspectRatioWidth/2+437,510+100); ColorR = ColorG = ColorB = 1.0f; if (NeedMoreEnergy && Setup.Profile[CurrentProfile].AdvancedProtectionSystem != 0) { ColorR = 1.0f; ColorG = 0.0f; ColorB = 0.0f; } Current = 0.5f; if (CurrentSystemStockNum>=17 && CurrentSystemStockNum<=20) { if (!NeedMoreEnergy || Setup.Profile[CurrentProfile].AdvancedProtectionSystem == 0) { if (CanBuy) {ColorR = 0.0f; ColorG = 0.8f; ColorB = 0.0f;} else {ColorR = 1.0f; ColorG = 0.5f; ColorB = 0.0f;} } Current = 1.0f; } if (vw_OnRect(&DstRect) && !isDialogBoxDrawing()) { if (NeedPlayWorkshopOnButtonSoundX != DstRect.left || NeedPlayWorkshopOnButtonSoundY != DstRect.top) { Audio_PlaySound2D(1,1.0f); NeedPlayWorkshopOnButtonSoundX = DstRect.left; NeedPlayWorkshopOnButtonSoundY = DstRect.top; } Current = 1.0f; CurrentCursorStatus = 1; if (vw_GetWindowLBMouse(true)) { Audio_PlaySound2D(2,1.0f); CurrentSystemStockNum = 17; } } else { if (NeedPlayWorkshopOnButtonSoundX == DstRect.left && NeedPlayWorkshopOnButtonSoundY == DstRect.top) { NeedPlayWorkshopOnButtonSoundX = 0; NeedPlayWorkshopOnButtonSoundY = 0; } } if (Setup.Profile[CurrentProfile].AdvancedProtectionSystem <= 0) { vw_DrawTransparent(&DstRect, &SrcRect, GetSystemIcon(0), true, Current*MenuContentTransp); int Size = vw_FontSize(vw_GetText("3_empty")); float WScale = 0; if (Size > 128) { Size = 128; WScale = -128; } vw_DrawFont(DstRect.left+(DstRect.right-DstRect.left-Size)/2, DstRect.top-4, WScale, 0, 1.0f, ColorR,ColorG,ColorB, Current*MenuContentTransp, vw_GetText("3_empty")); Size = vw_FontSize(vw_GetText("4_Advanced_System")); WScale = 0; if (Size > 128) { Size = 128; WScale = -128; } vw_DrawFont(DstRect.left+(DstRect.right-DstRect.left-Size)/2, DstRect.bottom-20, WScale, 0, 1.0f, ColorR,ColorG,ColorB, Current*MenuContentTransp, vw_GetText("4_Advanced_System")); } else { vw_DrawTransparent(&DstRect, &SrcRect, GetSystemIcon(Setup.Profile[CurrentProfile].AdvancedProtectionSystem+16), true, Current*MenuContentTransp); int Size = vw_FontSize(vw_GetText(GetSystemName(Setup.Profile[CurrentProfile].AdvancedProtectionSystem+16))); float WScale = 0; if (Size > 128) { Size = 128; WScale = -128; } vw_DrawFont(DstRect.left+(DstRect.right-DstRect.left-Size)/2, DstRect.bottom-70, WScale, 0, 1.0f, ColorR,ColorG,ColorB, Current*MenuContentTransp, vw_GetText(GetSystemName(Setup.Profile[CurrentProfile].AdvancedProtectionSystem+16))); } vw_DrawFont(Setup.iAspectRatioWidth/2+475-vw_FontSize(vw_GetText("7_Installed_Systems"))*1.5f, 630, 0, 0, 1.5f, 1.0f,1.0f,1.0f, MenuContentTransp, vw_GetText("7_Installed_Systems")); // текущая система vw_DrawFont(Setup.iAspectRatioWidth/2-250, 430, 0, 0, 1.0f, 1.0f,1.0f,0.0f, MenuContentTransp, vw_GetText("7_Selected_System")); vw_DrawFont(Setup.iAspectRatioWidth/2+250-vw_FontSize(vw_GetText("7_Installed_System")), 430, 0, 0, 1.0f, 1.0f,1.0f,0.0f, MenuContentTransp, vw_GetText("7_Installed_System")); if (CanBuy) vw_DrawFont(Setup.iAspectRatioWidth/2-250, 485, 0, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, "%s: %i", vw_GetText("7_Cost"), GetSystemCost(CurrentSystemStockNum)); else vw_DrawFont(Setup.iAspectRatioWidth/2-250, 485, 0, 0, 1.0f, 1.0f,0.5f,0.0f, CurrentAlert3*MenuContentTransp, "%s: %i", vw_GetText("7_Cost"), GetSystemCost(CurrentSystemStockNum)); vw_DrawFont(Setup.iAspectRatioWidth/2+250-vw_FontSize("%s: %i", vw_GetText("7_Cost"), Cost), 485, 0, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, "%s: %i", vw_GetText("7_Cost"), Cost); if (DrawButton128_2(Setup.iAspectRatioWidth/2-250,580-55, vw_GetText("1_Info"), MenuContentTransp, false)) { SetCurrentDialogBox(8); DialogSystem = CurrentSystemStockNum; } if (DrawButton128_2(Setup.iAspectRatioWidth/2+250-128,580-55, vw_GetText("1_Info"), MenuContentTransp, !CanSell)) { SetCurrentDialogBox(8); NeedMoreEnergyDialog = NeedMoreEnergy; if (CurrentSystemStockNum>=1 && CurrentSystemStockNum<=4) DialogSystem = Setup.Profile[CurrentProfile].EngineSystem; if (CurrentSystemStockNum>=5 && CurrentSystemStockNum<=8) DialogSystem = Setup.Profile[CurrentProfile].PowerSystem+4; if (CurrentSystemStockNum>=9 && CurrentSystemStockNum<=12) DialogSystem = Setup.Profile[CurrentProfile].TargetingSystem+8; if (CurrentSystemStockNum>=13 && CurrentSystemStockNum<=16) DialogSystem = Setup.Profile[CurrentProfile].TargetingMechanicSystem+12; if (CurrentSystemStockNum>=17 && CurrentSystemStockNum<=20) DialogSystem = Setup.Profile[CurrentProfile].AdvancedProtectionSystem+16; } if (DrawButton128_2(Setup.iAspectRatioWidth/2-250,50+580-55, vw_GetText("1_Buy"), MenuContentTransp, !CanBuy)) { BuyCurrentSystem(); } // покупка, если 2 раза кликнули на иконку текущей системы SetRect(&DstRect,Setup.iAspectRatioWidth/2-451,55+128+20,Setup.iAspectRatioWidth/2-451+128,55+128+128+20); if (vw_OnRect(&DstRect) && !isDialogBoxDrawing() && CanBuy) if (vw_GetWindowLBDoubleMouse(true)) BuyCurrentSystem(); if (DrawButton128_2(Setup.iAspectRatioWidth/2+250-128,50+580-55, vw_GetText("1_Sell"), MenuContentTransp, !CanSell)) { SellCurrentSystem(); } // вывод информации int SizeI = (Setup.iAspectRatioWidth-vw_FontSize("%s: %i", vw_GetText("3_Money"), Setup.Profile[CurrentProfile].Money)*1.25f)/2; if (CanBuy) vw_DrawFont(SizeI, 630, 0, 0, 1.25f, 1.0f,1.0f,0.0f, MenuContentTransp, "%s: %i", vw_GetText("3_Money"), Setup.Profile[CurrentProfile].Money); else vw_DrawFont(SizeI, 630, 0, 0, 1.25f, 1.0f,0.5f,0.0f, CurrentAlert3*MenuContentTransp, "%s: %i", vw_GetText("3_Money"), Setup.Profile[CurrentProfile].Money); }
//------------------------------------------------------------------------------------ // прорисовка чекбокса //------------------------------------------------------------------------------------ void DrawCheckBox(int X, int Y, bool *CheckBoxStatus, const char *Text, float Transp) { RECT SrcRect, DstRect; // получаем длину текста int Size = vw_FontSize(Text); bool ON = false; bool CanClick = false; // работаем с клавиатурой if ((Transp >= 0.99f) && !isDialogBoxDrawing() && DrawGameCursor) CurrentActiveMenuElement++; bool InFocusByKeyboard = false; if (CurrentKeyboardSelectMenuElement > 0) { if (CurrentKeyboardSelectMenuElement == CurrentActiveMenuElement) { InFocusByKeyboard = true; } } // 20 - расстояние между текстом SetRect(&DstRect,X+4,Y+4,X+40+20+Size,Y+40-4); if ((vw_OnRect(&DstRect) || InFocusByKeyboard) && !isDialogBoxDrawing() && DrawGameCursor) { // если тухнем или появляемся - не жать ON = true; if (Transp==1.0f) { CanClick = true; CurrentCursorStatus = 1; } } // рисуем SetRect(&SrcRect,0,0,40,38); SetRect(&DstRect,X,Y,X+40,Y+38); if (!ON || DragWeapon) vw_DrawFont(X+40+20, Y+8, 0, 0, 1.0f, 1.0f,1.0f,1.0f, Transp, Text); else vw_DrawFont(X+40+20, Y+8, 0, 0, 1.0f, 1.0f,0.5f,0.0f, Transp, Text); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/checkbox_main.tga"), true, Transp); if (*CheckBoxStatus) vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/checkbox_in.tga"), true, Transp); if (CanClick && !DragWeapon) if (vw_GetWindowLBMouse(true) || (InFocusByKeyboard && (vw_GetKeys(SDLK_KP_ENTER) || vw_GetKeys(SDLK_RETURN)))) { *CheckBoxStatus = !(*CheckBoxStatus); Audio_PlaySound2D(2,1.0f); if (InFocusByKeyboard) { vw_SetKeys(SDLK_KP_ENTER, false); vw_SetKeys(SDLK_RETURN, false); } } }
//------------------------------------------------------------------------------------ // прорисовка кнопки 384 //------------------------------------------------------------------------------------ bool DrawButton384(int X, int Y, const char *Text, float Transp, float *ButTransp, float *Update) { RECT SrcRect, DstRect; bool ON = false; bool CanClick = false; float IntTransp = Transp; // работаем с клавиатурой if ((Transp >= 0.99f) && !isDialogBoxDrawing() && DrawGameCursor) CurrentActiveMenuElement++; bool InFocusByKeyboard = false; if (CurrentKeyboardSelectMenuElement > 0) { if (CurrentKeyboardSelectMenuElement == CurrentActiveMenuElement) { InFocusByKeyboard = true; } } SetRect(&DstRect,X+2,Y+1,X+384,Y+63); if ((vw_OnRect(&DstRect) || InFocusByKeyboard) && !isDialogBoxDrawing() && DrawGameCursor) { // если тухнем или появляемся - не жать ON = true; if (Transp==1.0f) { CanClick = true; CurrentCursorStatus = 1; } if (*ButTransp == 1.0f) { Audio_PlaySound2D(1,1.0f); *Update = vw_GetTime(); *ButTransp = 0.99f; } (*ButTransp) -= 3.0f*(vw_GetTime() - (*Update)); if (*ButTransp < 0.60f) *ButTransp = 0.60f; *Update = vw_GetTime(); IntTransp = (*ButTransp) * Transp; } else { if (*ButTransp < 1.0f) { (*ButTransp) += 3.0f*(vw_GetTime() - (*Update)); if (*ButTransp > 1.0f) *ButTransp =1.0f; *Update = vw_GetTime(); } IntTransp = (*ButTransp) * Transp; } // размер задней тени SetRect(&SrcRect,2,2,512-2,96-2 ); // рисуем тень SetRect(&DstRect,X-64+2,Y-17+2,X-64+512-2,Y-17+96-2); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/button384_back.tga"), true, IntTransp, 0.0f, RI_UL_CORNER, 1.0f, 1.0f, 1.0f); SetRect(&SrcRect,0,0,384,64 ); // рисуем кнопку SetRect(&DstRect,X,Y,X+384,Y+64); if (!ON) vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/button384_out.tga"), true, Transp); else vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/button384_in.tga"), true, Transp); // получаем длину текста int Size = vw_FontSize(Text); // если текст сильно большой - сжимаем буквы, чтобы не вылазило за пределы кнопки float WScale = 0; if (Size > 310) { Size = 310; WScale = -310; } // находим смещение текста int SizeI = X + (SrcRect.right-SrcRect.left-Size)/2; // рисуем текст if (!ON) vw_DrawFont(SizeI, Y+21, WScale, 0, 1.0f, 1.0f,1.0f,1.0f, (0.7f*Transp)/2.0f, Text); else vw_DrawFont(SizeI, Y+21, WScale, 0, 1.0f, 1.0f,1.0f,1.0f, Transp, Text); if (CanClick) if (vw_GetWindowLBMouse(true) || (InFocusByKeyboard && (vw_GetKeys(SDLK_KP_ENTER) || vw_GetKeys(SDLK_RETURN)))) { Audio_PlaySound2D(2,1.0f); if (InFocusByKeyboard) { vw_SetKeys(SDLK_KP_ENTER, false); vw_SetKeys(SDLK_RETURN, false); } return true; } return false; }
//------------------------------------------------------------------------------------ // прорисовка кнопки - 128 //------------------------------------------------------------------------------------ bool DrawButton128_2(int X, int Y, const char *Text, float Transp, bool Off, bool SoundClick) { RECT SrcRect, DstRect, MouseRect; SetRect(&SrcRect,2,2,158-2,64-2); SetRect(&DstRect,X-14+2,Y-14+2,X+158-14-2,Y+64-14-2); SetRect(&MouseRect,X,Y,X+132,Y+35); // получаем длину текста int Size = vw_FontSize(Text); // если текст сильно большой - сжимаем буквы, чтобы не вылазило за пределы кнопки float WScale = 0; if (Size > 108) { Size = 108; WScale = -108; } // находим смещение текста int SizeI = DstRect.left + (SrcRect.right-SrcRect.left-Size)/2; if (Off || DragWeapon) { vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/button_dialog128_off.tga"), true, Transp); vw_DrawFont(SizeI, Y+6, WScale, 0, 1.0f, 1.0f,1.0f,1.0f, (0.7f*Transp)/2.0f, Text); SetRect(&DstRect,X,Y,X+132,Y+35); if (vw_OnRect(&DstRect) && !isDialogBoxDrawing()) { if (Transp==1.0f && !DragWeapon) { CurrentCursorStatus = 2; if (vw_GetWindowLBMouse(true)) Audio_PlaySound2D(7,1.0f); } } return false; } bool ON = false; bool CanClick = false; // работаем с клавиатурой if ((Transp >= 0.99f) && !isDialogBoxDrawing() && DrawGameCursor) CurrentActiveMenuElement++; bool InFocusByKeyboard = false; if (CurrentKeyboardSelectMenuElement > 0) { if (CurrentKeyboardSelectMenuElement == CurrentActiveMenuElement) { InFocusByKeyboard = true; } } if ((vw_OnRect(&MouseRect) || InFocusByKeyboard) && !isDialogBoxDrawing() && DrawGameCursor) { // если тухнем или появляемся - не жать ON = true; if (Transp==1.0f) { CanClick = true; CurrentCursorStatus = 1; } if (NeedPlayOnButtonSoundX != X || NeedPlayOnButtonSoundY != Y) { Audio_PlaySound2D(15,1.0f); NeedPlayOnButtonSoundX = X; NeedPlayOnButtonSoundY = Y; } } else { if (NeedPlayOnButtonSoundX == X && NeedPlayOnButtonSoundY == Y) { NeedPlayOnButtonSoundX = 0; NeedPlayOnButtonSoundY = 0; } } if (!ON) vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/button_dialog128_out.tga"), true, Transp); else vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/button_dialog128_in.tga"), true, Transp); // рисуем текст if (!ON) vw_DrawFont(SizeI, Y+6, WScale, 0, 1.0f, 1.0f,1.0f,1.0f, (0.7f*Transp)/2.0f, Text); else vw_DrawFont(SizeI, Y+6, WScale, 0, 1.0f, 1.0f,1.0f,1.0f, Transp, Text); if (CanClick) if (vw_GetWindowLBMouse(true) || (InFocusByKeyboard && (vw_GetKeys(SDLK_KP_ENTER) || vw_GetKeys(SDLK_RETURN)))) { if (SoundClick) Audio_PlaySound2D(2,1.0f); if (InFocusByKeyboard) { vw_SetKeys(SDLK_KP_ENTER, false); vw_SetKeys(SDLK_RETURN, false); } return true; } return false; }
void DifficultyMenu() { RECT SrcRect, DstRect; SetRect(&SrcRect,2,2,863-2,484-2); SetRect(&DstRect,Setup.iAspectRatioWidth/2-427,175-15,Setup.iAspectRatioWidth/2-427+863-4,175-15+484-4); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/panel800_444_back.tga"), true, 0.9f*MenuContentTransp); int X1 = Setup.iAspectRatioWidth/2 - 372; int Y1 = 217; int Prir1 = 50; int Size; int SizeI; vw_DrawFont(X1, Y1, -340, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, vw_GetText("3_Enemy_Weapon_Penalty")); bool ButOff = false; if (Setup.Profile[CurrentProfile].NPCWeaponPenalty == 1) ButOff = true; if (DrawButton128_2(X1+360, Y1-6, vw_GetText("1_Decrease"), MenuContentTransp, ButOff)) { Setup.Profile[CurrentProfile].NPCWeaponPenalty--; if (Setup.Profile[CurrentProfile].NPCWeaponPenalty < 1) Setup.Profile[CurrentProfile].NPCWeaponPenalty = 1; } ButOff = false; if (Setup.Profile[CurrentProfile].NPCWeaponPenalty == 3) ButOff = true; if (DrawButton128_2(X1+616, Y1-6, vw_GetText("1_Increase"), MenuContentTransp, ButOff)) { Setup.Profile[CurrentProfile].NPCWeaponPenalty++; if (Setup.Profile[CurrentProfile].NPCWeaponPenalty > 3) Setup.Profile[CurrentProfile].NPCWeaponPenalty = 3; } if (Setup.Profile[CurrentProfile].NPCWeaponPenalty == 1) { Size = vw_FontSize(vw_GetText("3_None")); SizeI = (110-Size)/2; vw_DrawFont(X1+498+SizeI, Y1, 0, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, vw_GetText("3_None")); } else { Size = vw_FontSize("x%i", Setup.Profile[CurrentProfile].NPCWeaponPenalty); SizeI = (110-Size)/2; vw_DrawFont(X1+498+SizeI, Y1, 0, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, "x%i", Setup.Profile[CurrentProfile].NPCWeaponPenalty); } Y1 += Prir1; vw_DrawFont(X1, Y1, -340, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, vw_GetText("3_Enemy_Armor_Penalty")); ButOff = false; if (Setup.Profile[CurrentProfile].NPCArmorPenalty == 1) ButOff = true; if (DrawButton128_2(X1+360, Y1-6, vw_GetText("1_Decrease"), MenuContentTransp, ButOff)) { Setup.Profile[CurrentProfile].NPCArmorPenalty--; if (Setup.Profile[CurrentProfile].NPCArmorPenalty < 1) Setup.Profile[CurrentProfile].NPCArmorPenalty = 1; } ButOff = false; if (Setup.Profile[CurrentProfile].NPCArmorPenalty == 4) ButOff = true; if (DrawButton128_2(X1+616, Y1-6, vw_GetText("1_Increase"), MenuContentTransp, ButOff)) { Setup.Profile[CurrentProfile].NPCArmorPenalty++; if (Setup.Profile[CurrentProfile].NPCArmorPenalty > 4) Setup.Profile[CurrentProfile].NPCArmorPenalty = 4; } if (Setup.Profile[CurrentProfile].NPCArmorPenalty == 1) { Size = vw_FontSize(vw_GetText("3_None")); SizeI = (110-Size)/2; vw_DrawFont(X1+498+SizeI, Y1, 0, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, vw_GetText("3_None")); } else { Size = vw_FontSize("x%i", Setup.Profile[CurrentProfile].NPCArmorPenalty); SizeI = (110-Size)/2; vw_DrawFont(X1+498+SizeI, Y1, 0, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, "x%i", Setup.Profile[CurrentProfile].NPCArmorPenalty); } Y1 += Prir1; vw_DrawFont(X1, Y1, -340, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, vw_GetText("3_Enemy_Targeting_Penalty")); ButOff = false; if (Setup.Profile[CurrentProfile].NPCTargetingSpeedPenalty == 1) ButOff = true; if (DrawButton128_2(X1+360, Y1-6, vw_GetText("1_Decrease"), MenuContentTransp, ButOff)) { Setup.Profile[CurrentProfile].NPCTargetingSpeedPenalty--; if (Setup.Profile[CurrentProfile].NPCTargetingSpeedPenalty < 1) Setup.Profile[CurrentProfile].NPCTargetingSpeedPenalty = 1; } ButOff = false; if (Setup.Profile[CurrentProfile].NPCTargetingSpeedPenalty == 4) ButOff = true; if (DrawButton128_2(X1+616, Y1-6, vw_GetText("1_Increase"), MenuContentTransp, ButOff)) { Setup.Profile[CurrentProfile].NPCTargetingSpeedPenalty++; if (Setup.Profile[CurrentProfile].NPCTargetingSpeedPenalty > 4) Setup.Profile[CurrentProfile].NPCTargetingSpeedPenalty = 4; } if (Setup.Profile[CurrentProfile].NPCTargetingSpeedPenalty == 1) { Size = vw_FontSize(vw_GetText("3_None")); SizeI = (110-Size)/2; vw_DrawFont(X1+498+SizeI, Y1, 0, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, vw_GetText("3_None")); } else { Size = vw_FontSize("x%i", Setup.Profile[CurrentProfile].NPCTargetingSpeedPenalty); SizeI = (110-Size)/2; vw_DrawFont(X1+498+SizeI, Y1, 0, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, "x%i", Setup.Profile[CurrentProfile].NPCTargetingSpeedPenalty); } Y1 += Prir1; vw_DrawFont(X1, Y1, -340, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, vw_GetText("3_Limited_Ammo")); if (DrawButton128_2(X1+360+128, Y1-6, vw_GetText(OnOff[Setup.Profile[CurrentProfile].LimitedAmmo]), MenuContentTransp, false)) { Setup.Profile[CurrentProfile].LimitedAmmo++; if (Setup.Profile[CurrentProfile].LimitedAmmo > 1) Setup.Profile[CurrentProfile].LimitedAmmo = 0; } Y1 += Prir1; vw_DrawFont(X1, Y1, -340, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, vw_GetText("3_Destroyable_Weapon")); if (DrawButton128_2(X1+360+128, Y1-6, vw_GetText(OnOff[Setup.Profile[CurrentProfile].DestroyableWeapon]), MenuContentTransp, false)) { Setup.Profile[CurrentProfile].DestroyableWeapon++; if (Setup.Profile[CurrentProfile].DestroyableWeapon > 1) Setup.Profile[CurrentProfile].DestroyableWeapon = 0; } Y1 += Prir1; vw_DrawFont(X1, Y1, -340, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, vw_GetText("3_Weapon_Targeting_Mode")); if (DrawButton128_2(X1+360+128, Y1-6, vw_GetText(ArcadeSim[Setup.Profile[CurrentProfile].WeaponTargetingMode]), MenuContentTransp, false)) { Setup.Profile[CurrentProfile].WeaponTargetingMode++; if (Setup.Profile[CurrentProfile].WeaponTargetingMode > 1) Setup.Profile[CurrentProfile].WeaponTargetingMode = 0; } Y1 += Prir1; vw_DrawFont(X1, Y1, -340, 0, 1.0f, 1.0f,1.0f,1.0f, MenuContentTransp, vw_GetText("3_SpaceShip_Control_Mode")); if (DrawButton128_2(X1+360+128, Y1-6, vw_GetText(ArcadeSim[Setup.Profile[CurrentProfile].SpaceShipControlMode]), MenuContentTransp, false)) { Setup.Profile[CurrentProfile].SpaceShipControlMode++; if (Setup.Profile[CurrentProfile].SpaceShipControlMode > 1) Setup.Profile[CurrentProfile].SpaceShipControlMode = 0; } // считаем общую сложность Setup.Profile[CurrentProfile].Difficulty = 100-( (Setup.Profile[CurrentProfile].NPCWeaponPenalty-1)*6+ (Setup.Profile[CurrentProfile].NPCArmorPenalty-1)*6+ (Setup.Profile[CurrentProfile].NPCTargetingSpeedPenalty-1)*6+ Setup.Profile[CurrentProfile].LimitedAmmo*14+ Setup.Profile[CurrentProfile].DestroyableWeapon*11+ Setup.Profile[CurrentProfile].WeaponTargetingMode*12+ Setup.Profile[CurrentProfile].SpaceShipControlMode*15); Y1 += Prir1; Size = vw_FontSize("%s: %i%%", vw_GetText("3_Current_Profile_Difficulty"), Setup.Profile[CurrentProfile].Difficulty); SizeI = (Setup.iAspectRatioWidth-Size)/2; vw_DrawFont(SizeI, Y1, 0, 0, 1.0f, 1.0f,1.0f,0.0f, MenuContentTransp, "%s: %i%%", vw_GetText("3_Current_Profile_Difficulty"), Setup.Profile[CurrentProfile].Difficulty); int X = Setup.iAspectRatioWidth/2 - 192; int Y = 175+95*5; if (DrawButton384(X,Y, vw_GetText("1_BACK"), MenuContentTransp, &Button1Transp, &LastButton1UpdateTime)) { ComBuffer = PROFILE; } }