rott/kf_sources/NicePack/Classes/ZedTimeComponent.uc
2026-07-14 20:27:09 +07:00

111 lines
3.3 KiB
Ucode

/**
* 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 <https://www.gnu.org/licenses/>.
*/
class ZedTimeComponent extends Object;
var private bool zedTimeActive;
var private float zedTimeRemainder;
var private int zedTimeStack;
var array<float> 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
}