/** * Author: dkanus * Home repo: https://www.insultplayers.ru/git/AcediaFramework/AcediaCore * License: GPL * Copyright 2025 Anton Tarasenko *------------------------------------------------------------------------------ * This file is part of Acedia. * * Acedia is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3 of the License, or * (at your option) any later version. * * Acedia is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Acedia. If not, see . */ class ZedTimeComponent extends Object; var private bool zedTimeActive; var private float zedTimeRemainder; var private int zedTimeStack; var array slowDownLevels; const ZED_TIME_SPEED = 0.8;//0.2; const DEFAULT_ZED_TIME_DURATION = 30.0; //var float ZedTimeSlomoScale; //var float LastZedTimeEvent; //var int ZedTimeExtensionsUsed; //var bool bSpeedingBackUp; public function ActivateZedTime(optional float duration) { local GameInfo game; local Controller nextController; local KFPlayerController kfPlayerController; if (zedTimeActive) return; game = GetGameInfo(); if (game == none) return; if (duration <= 0) { duration = DEFAULT_ZED_TIME_DURATION; } zedTimeActive = true; zedTimeRemainder = duration; zedTimeStack += 1; game.SetGameSpeed(ZED_TIME_SPEED); nextController = game.level.controllerList; while (nextController != none) { kfPlayerController = KFPlayerController(nextController); if(kfPlayerController != none) { kfPlayerController.ClientEnterZedTime(); } nextController = nextController.nextController; } } public function DeactivateZedTime() { local GameInfo game; local Controller nextController; local KFPlayerController kfPlayerController; if (!zedTimeActive) return; game = GetGameInfo(); if (game == none) return; zedTimeActive = false; zedTimeStack = 0; game.SetGameSpeed(1.0); nextController = game.level.controllerList; while (nextController != none) { kfPlayerController = KFPlayerController(nextController); if(kfPlayerController != none) { kfPlayerController.ClientExitZedTime(); } nextController = nextController.nextController; } } public function ProcessTick(float realDeltaTime) { if (zedTimeActive && zedTimeRemainder > 0) { zedTimeRemainder -= realDeltaTime; if (zedTimeRemainder <= 0) { DeactivateZedTime(); } } } private function GameInfo GetGameInfo() { local NicePack mutator; mutator = class'NicePack'.static.Myself(none); if (mutator != none) { return mutator.level.game; } return none; } defaultproperties { slowDownLevels(0) = 0.9 slowDownLevels(1) = 0.8 slowDownLevels(2) = 0.7 }