diff --git a/sources/GUI/NiceInteraction.uc b/sources/GUI/NiceInteraction.uc index f8ec80d..1ea9685 100644 --- a/sources/GUI/NiceInteraction.uc +++ b/sources/GUI/NiceInteraction.uc @@ -1,8 +1,10 @@ class NiceInteraction extends Interaction dependson(NicePack) dependson(NiceAbilityManager); + #exec OBJ LOAD FILE=KillingFloorHUD.utx #exec OBJ LOAD FILE=KillingFloor2HUD.utx + var NicePack NicePackMutator; var Material bleedIcon, poisonIcon; var Texture greenBar, redBar; @@ -33,7 +35,7 @@ function RegisterMutator(NicePack activePack) NicePackMutator = activePack; } -final private function bool bIsPoisoned(ScrnHumanPawn pwn) +final private function bool bIsPoisoned(NiceHumanPawn pwn) { local Inventory I; @@ -41,14 +43,14 @@ final private function bool bIsPoisoned(ScrnHumanPawn pwn) { for (I = pwn.Inventory; I != none; I = I.Inventory) { - if (MeanPoisonInventory(I) != none) + if (I.IsA('MeanPoisonInventory')) return true; } } return false; } -final private function bool bIsBleeding(ScrnHumanPawn pwn) +final private function bool bIsBleeding(NiceHumanPawn pwn) { local Inventory I; @@ -56,7 +58,7 @@ final private function bool bIsBleeding(ScrnHumanPawn pwn) { for (I = pwn.Inventory; I != none; I = I.Inventory) { - if (MeanBleedInventory(I) != none) + if (I.IsA('MeanBleedInventory')) return true; } } @@ -69,7 +71,10 @@ final private function UpdateNiceWeapProgressSet(NiceHumanPawn pwn) local NiceWeapon niceWeap; local WeaponProgressDisplay newProgress; - if (pwn != none && pwn.Inventory != none) + // clean this! + niceWeapProgressSet.Length = 0; + + if (pwn.Inventory != none) { for (I = pwn.Inventory; I != none; I = I.Inventory) { @@ -97,46 +102,46 @@ function PostRender(Canvas C) local NicePlayerController nicePlayer; local ScrnHUD scrnHUDInstance; // TODO maybe use scrnhud? - // local HUDKillingFloor kfHud; + // local HUDKillingFloor kfHud; local Texture barTexture; local int x, y, center, barWidth, offset; local int missesWidth, missesHeight, missesSpace; local int missesX, missesY; - // local Vector CamPos, ViewDir; - // local Rotator CamRot; - // local float OffsetX, BarLength, BarHeight, XL, YL, posY; + // local Vector CamPos, ViewDir; + // local Rotator CamRot; + // local float OffsetX, BarLength, BarHeight, XL, YL, posY; + + if (C == none || C.ViewPort == none || C.ViewPort.Actor == none || C.ViewPort.Actor.Pawn == none) + return; - if(C == none) return; - if(C.ViewPort == none) return; - if(C.ViewPort.Actor == none) return; - if(C.ViewPort.Actor.Pawn == none) return; nicePlayer = NicePlayerController(C.ViewPort.Actor.Pawn.Controller); niceWeap = NiceWeapon(C.ViewPort.Actor.Pawn.Weapon); - if(nicePlayer == none) + if (nicePlayer == none) return; - scrnHUDInstance = ScrnHUD(nicePlayer.myHUD); + + nicePawn = NiceHumanPawn(nicePlayer.pawn); //// Draw bleed and poison icons for OWNER offset = 4; - // BLEED!!! - if (bIsBleeding(ScrnHumanPawn(C.ViewPort.Actor.Pawn))) - { - x = C.ClipX * 0.007; - y = C.ClipY * 0.93 - size * offset; - C.SetPos(x, y); - C.DrawTile(bleedIcon, size, size, 0, 0, bleedIcon.MaterialUSize(), bleedIcon.MaterialVSize()); - } - offset++; - // POISON!!! - if (bIsPoisoned(ScrnHumanPawn(C.ViewPort.Actor.Pawn))) - { - x = C.ClipX * 0.007; - y = C.ClipY * 0.93 - size * offset; - C.SetPos(x, y); - C.DrawTile(poisonIcon, size, size, 0, 0, poisonIcon.MaterialUSize(), poisonIcon.MaterialVSize()); - } + // BLEED!!! + if (bIsBleeding(nicePawn)) + { + x = C.ClipX * 0.007; + y = C.ClipY * 0.93 - size * offset; + C.SetPos(x, y); + C.DrawTile(bleedIcon, size, size, 0, 0, bleedIcon.MaterialUSize(), bleedIcon.MaterialVSize()); + } + offset++; + // POISON!!! + if (bIsPoisoned(nicePawn)) + { + x = C.ClipX * 0.007; + y = C.ClipY * 0.93 - size * offset; + C.SetPos(x, y); + C.DrawTile(poisonIcon, size, size, 0, 0, poisonIcon.MaterialUSize(), poisonIcon.MaterialVSize()); + } - // draw bleed and poison icons for TEAMMATES + // TODO draw bleed and poison icons for TEAMMATES // C.GetCAmeraLocation(CamPos, CamRot); // ViewDir = vector(CamRot); // kfHud = HUDKillingFloor(ViewportOwner.Actor.myHUD); @@ -177,39 +182,8 @@ function PostRender(Canvas C) // } // } - if (niceWeap != none && niceWeap.bShowSecondaryCharge && scrnHUDInstance != none) - { - C.ColorModulate.X = 1; - C.ColorModulate.Y = 1; - C.ColorModulate.Z = 1; - C.ColorModulate.W = scrnHUDInstance.HudOpacity / 255; - if(!scrnHUDInstance.bLightHud) - scrnHUDInstance.DrawSpriteWidget(C, scrnHUDInstance.SecondaryClipsBG); - scrnHUDInstance.DrawSpriteWidget(C, scrnHUDInstance.SecondaryClipsIcon); - scrnHUDInstance.SecondaryClipsDigits.value = niceWeap.secondaryCharge; - scrnHUDInstance.DrawNumericWidget(C, scrnHUDInstance.SecondaryClipsDigits, scrnHUDInstance.DigitsSmall); - } - - niceMutator = class'NicePack'.static.Myself(C.ViewPort.Actor.Pawn.Level); - if (niceMutator == none) - return; - //// Draw counters - if(nicePlayer != none && nicePlayer.bFlagDisplayCounters) - { - x = C.ClipX * 0.5 - (64 + 2) * niceMutator.GetVisibleCountersAmount(); - y = C.ClipY * 0.01; - for(i = 0;i < niceMutator.niceCounterSet.Length;i ++) - if(niceMutator.niceCounterSet[i].value != 0 || niceMutator.niceCounterSet[i].bShowZeroValue){ - DrawCounter(C, niceMutator.niceCounterSet[i], x, y, C.ViewPort.Actor.Pawn.PlayerReplicationInfo.Team); - x += 128 + 4; - } - } - - nicePawn = NiceHumanPawn(nicePlayer.pawn); - //// Draw weapons progress bars // at first update weapon info - niceWeapProgressSet.Length = 0; UpdateNiceWeapProgressSet(nicePawn); if (nicePawn != none && class'NiceVeterancyTypes'.static.hasSkill(nicePlayer, class'NiceSkillEnforcerMultitasker') @@ -225,52 +199,84 @@ function PostRender(Canvas C) } } - //// Draw invincibility bar - if(nicePawn != none && nicePawn.invincibilityTimer != 0.0) + scrnHUDInstance = ScrnHUD(nicePlayer.myHUD); + + if (niceWeap != none && niceWeap.bShowSecondaryCharge && scrnHUDInstance != none) { - C.SetDrawColor(255, 255, 255); - if(nicePawn.invincibilityTimer > 0) - barTexture = greenBar; - else - barTexture = redBar; - center = C.ClipX * 0.5; - y = C.ClipY * 0.75; - barWidth = C.ClipX * 0.2; - niceVet = class'NiceVeterancyTypes'.static. - GetVeterancy(nicePawn.PlayerReplicationInfo); - if(niceVet != none){ - if(nicePawn.invincibilityTimer > 0){ - barWidth *= nicePawn.invincibilityTimer - / niceVet.static.GetInvincibilityDuration(nicePawn.KFPRI); - } - else{ - barWidth *= nicePawn.invincibilityTimer / - class'NiceSkillZerkGunzerker'.default.cooldown; - } - } - else - barWidth = 0; - x = center - (barWidth / 2); - C.SetPos(x, y); - C.DrawTile(barTexture, barWidth, 32, 0, 0, barTexture.MaterialUSize(), barTexture.MaterialVSize()); - if(nicePawn.safeMeleeMisses <= 0) - return; - missesSpace = 10;//64x64 => 16x16 - missesHeight = 16; - missesWidth = nicePawn.safeMeleeMisses * 16 - + (nicePawn.safeMeleeMisses - 1) * missesSpace; - missesX = center - (missesWidth / 2); - missesY = y + (32 - missesHeight) * 0.5; - for(i = 0;i < nicePawn.safeMeleeMisses;i ++){ - C.SetPos(missesX + i * (16 + missesSpace), missesY); - C.DrawTile(shield, 16, 16, 0, 0, shield.MaterialUSize(), shield.MaterialVSize()); - } + C.ColorModulate.X = 1; + C.ColorModulate.Y = 1; + C.ColorModulate.Z = 1; + C.ColorModulate.W = scrnHUDInstance.HudOpacity / 255; + if (!scrnHUDInstance.bLightHud) + scrnHUDInstance.DrawSpriteWidget(C, scrnHUDInstance.SecondaryClipsBG); + scrnHUDInstance.DrawSpriteWidget(C, scrnHUDInstance.SecondaryClipsIcon); + scrnHUDInstance.SecondaryClipsDigits.value = niceWeap.secondaryCharge; + scrnHUDInstance.DrawNumericWidget(C, scrnHUDInstance.SecondaryClipsDigits, scrnHUDInstance.DigitsSmall); } - // Draw cooldowns - if(nicePlayer.abilityManager == none) + + //// Draw invincibility bar + if (nicePawn != none && nicePawn.invincibilityTimer != 0.0) + { + C.SetDrawColor(255, 255, 255); + if (nicePawn.invincibilityTimer > 0) + barTexture = greenBar; + else + barTexture = redBar; + center = C.ClipX * 0.5; + y = C.ClipY * 0.75; + barWidth = C.ClipX * 0.2; + niceVet = class'NiceVeterancyTypes'.static. + GetVeterancy(nicePawn.PlayerReplicationInfo); + if (niceVet != none) + { + if (nicePawn.invincibilityTimer > 0) + barWidth *= nicePawn.invincibilityTimer / niceVet.static.GetInvincibilityDuration(nicePawn.KFPRI); + else + barWidth *= nicePawn.invincibilityTimer / class'NiceSkillZerkGunzerker'.default.cooldown; + } + else + barWidth = 0; + + x = center - (barWidth / 2); + C.SetPos(x, y); + C.DrawTile(barTexture, barWidth, 32, 0, 0, barTexture.MaterialUSize(), barTexture.MaterialVSize()); + if (nicePawn.safeMeleeMisses <= 0) + return; + missesSpace = 10; // 64x64 => 16x16 + missesHeight = 16; + missesWidth = nicePawn.safeMeleeMisses * 16 + (nicePawn.safeMeleeMisses - 1) * missesSpace; + missesX = center - (missesWidth / 2); + missesY = y + (32 - missesHeight) * 0.5; + + for (i = 0; i < nicePawn.safeMeleeMisses; i++) + { + C.SetPos(missesX + i * (16 + missesSpace), missesY); + C.DrawTile(shield, 16, 16, 0, 0, shield.MaterialUSize(), shield.MaterialVSize()); + } + } + + //// Draw cooldowns + if (nicePlayer.abilityManager == none) return; - for(i = 0;i < nicePlayer.abilityManager.currentAbilitiesAmount;i ++) + for (i = 0; i < nicePlayer.abilityManager.currentAbilitiesAmount; i++) DrawAbilityCooldown(C, i); + + //// Draw counters + niceMutator = class'NicePack'.static.Myself(nicePawn.Level); + + if (niceMutator != none && nicePlayer != none && nicePlayer.bFlagDisplayCounters) + { + x = C.ClipX * 0.5 - (64 + 2) * niceMutator.GetVisibleCountersAmount(); + y = C.ClipY * 0.01; + for (i = 0; i < niceMutator.niceCounterSet.Length; i++) + { + if (niceMutator.niceCounterSet[i].value != 0 || niceMutator.niceCounterSet[i].bShowZeroValue) + { + DrawCounter(C, niceMutator.niceCounterSet[i], x, y, C.ViewPort.Actor.Pawn.PlayerReplicationInfo.Team); + x += 128 + 4; + } + } + } } function DrawCounter(Canvas C, NicePack.CounterDisplay counter, int x, int y, TeamInfo team){ @@ -443,51 +449,59 @@ function DrawWeaponProgress(Canvas C, WeaponProgressDisplay weapProgress, int x, } } -function bool KeyEvent(EInputKey Key, EInputAction Action, float Delta){ +function bool KeyEvent(EInputKey Key, EInputAction Action, float Delta) +{ local bool bNeedsReload; local string Alias, LeftPart, RigthPart; local NiceWeapon niceWeap; local NicePlayerController nicePlayer; + // Find controller and current weapon nicePlayer = NicePlayerController(ViewportOwner.Actor); - if(nicePlayer == none) + if (nicePlayer == none) return false; - if(nicePlayer.Pawn != none) + if (nicePlayer.Pawn != none) niceWeap = NiceWeapon(nicePlayer.Pawn.Weapon); // If this is a button press - detect alias - if(Action == IST_Press){ + if (Action == IST_Press) + { // Check for reload command Alias = nicePlayer.ConsoleCommand("KEYBINDING" @ nicePlayer.ConsoleCommand("KEYNAME" @ Key)); - if(nicePlayer.bAdvReloadCheck) + if (nicePlayer.bAdvReloadCheck) bNeedsReload = InStr(Caps(Alias), "RELOADMENOW") > -1 || InStr(Caps(Alias), "RELOADWEAPON") > -1; - if(Divide(Alias, " ", LeftPart, RigthPart)) + if (Divide(Alias, " ", LeftPart, RigthPart)) Alias = LeftPart; - if(Key == IK_MouseWheelUp || Key == IK_MouseWheelDown){ + if (Key == IK_MouseWheelUp || Key == IK_MouseWheelDown) + { nicePlayer.UpdateSelectors(); - if(nicePlayer.hasZeroSelector && nicePlayer.bUsesMouseWheel && nicePlayer.bNiceWeaponManagement){ + if (nicePlayer.hasZeroSelector && nicePlayer.bUsesMouseWheel && nicePlayer.bNiceWeaponManagement) + { nicePlayer.ScrollSelector(0, nicePlayer.bMouseWheelLoops, Key == IK_MouseWheelUp); return true; } } } - // Open trader on movement - if(Alias ~= "MoveForward" || Alias ~= "MoveBackward" || Alias ~= "TurnLeft" || Alias ~= "TurnRight" - || Alias ~= "StrafeLeft" || Alias ~= "StrafeRight" || Alias ~= "Axis"){ + // Open trader on movement + if (Alias ~= "MoveForward" || Alias ~= "MoveBackward" || Alias ~= "TurnLeft" || Alias ~= "TurnRight" + || Alias ~= "StrafeLeft" || Alias ~= "StrafeRight" || Alias ~= "Axis") + { // Open trader if it's a pre-game - if(NicePackMutator.bIsPreGame && NicePackMutator.bInitialTrader && (NicePackMutator.bStillDuringInitTrader || !nicePlayer.bOpenedInitTrader) && nicePlayer.Pawn != none){ + if (NicePackMutator.bIsPreGame && NicePackMutator.bInitialTrader && (NicePackMutator.bStillDuringInitTrader || !nicePlayer.bOpenedInitTrader) && nicePlayer.Pawn != none) + { nicePlayer.ShowBuyMenu("Initial trader", KFHumanPawn(nicePlayer.Pawn).MaxCarryWeight); nicePlayer.bOpenedInitTrader = true; return true; } - //nicePlayer.ClientOpenMenu("NicePack.NiceGUIBuyMenu",,"Test stuff",string(15)); + // nicePlayer.ClientOpenMenu("NicePack.NiceGUIBuyMenu",,"Test stuff",string(15)); } // Reload if we've detected a reload alias in this button's command - if(niceWeap != none && !nicePlayer.bUseServerReload && - (bNeedsReload || Alias ~= "ReloadMeNow" || Alias ~= "ReloadWeapon")) + if (niceWeap != none && !nicePlayer.bUseServerReload && + (bNeedsReload || Alias ~= "ReloadMeNow" || Alias ~= "ReloadWeapon")) niceWeap.ClientReloadMeNow(); return false; } + defaultproperties { bleedIcon=Texture'NicePackT.MeanZeds.bleedIcon' @@ -500,4 +514,4 @@ defaultproperties InventoryBoxHeight=0.075000 BorderSize=0.005000 bVisible=True -} +} \ No newline at end of file diff --git a/sources/NicePlayerController.uc b/sources/NicePlayerController.uc index 00e8fae..4c56f7b 100644 --- a/sources/NicePlayerController.uc +++ b/sources/NicePlayerController.uc @@ -1264,7 +1264,7 @@ state Spectating{ A = Trace(HitLocation, HitNormal, TraceEnd, TraceStart, true); if(Pawn(A) != none) ServerSetViewTarget(A); - } + } } simulated function ClientSpawnGhostProjectile(Vector Start, int pitch, int yaw, int roll, NiceFire.ShotType shotParams, NiceFire.FireModeContext fireContext, bool bForceComplexTraj){ local Rotator projectileDir;