1
0
KF2-Dev-Scripts/KFGameContent/Classes/KFWeap_Rifle_HRGIncision.uc
2020-12-13 18:01:13 +03:00

217 lines
7.4 KiB
Ucode

//=============================================================================
// KFWeap_Rifle_HRGIncision
//=============================================================================
//=============================================================================
// Killing Floor 2
// Copyright (C) 2019 Tripwire Interactive LLC
//=============================================================================
class KFWeap_Rifle_HRGIncision extends KFWeap_Rifle_RailGun;
const ShootDartAnim = 'Shoot_Dart_HI';
const ShootDartIronAnim = 'Shoot_Dart_Iron_HI';
/** Icon textures for lock on drawing */
var Texture2D LockedTeammateHitZoneIcon;
var Texture2D DefaultTeammateHitZoneIcon;
var LinearColor GreenIconColor;
/** Override for 1st person healing dart anims */
simulated function name GetWeaponFireAnim(byte FireModeNum)
{
if (FireModeNum == ALTFIRE_FIREMODE)
{
return (bUsingSights) ? ShootDartIronAnim : ShootDartAnim;
}
return Super.GetWeaponFireAnim(FireModeNum);
}
/** Instead of switch fire mode use as immediate alt fire */
simulated function AltFireMode()
{
if (!Instigator.IsLocallyControlled())
{
return;
}
// StartFire - StopFire called from KFPlayerInput
StartFire(ALTFIRE_FIREMODE);
}
simulated function StartFire(byte FireModeNum)
{
// Skip KFWeap_Rifle_RailGun::StartFire because of some irrelevant cheat detection there
super(KFWeap_ScopedBase).StartFire(FireModeNum);
}
simulated function vector GetInstantFireAimLocation()
{
return TargetingComp.LockedAimLocation[CurrentFireMode];
}
/*********************************************************************************************
* @name Targeting HUD
**********************************************************************************************/
/** Handle drawing items on the scope ScriptedTexture */
simulated function OnRender(Canvas C)
{
local int i;
super.OnRender(C);
if (!bUsingSights)
{
return;
}
// Draw the targeting locations on the scope
for (i = 0; i < TargetingComp.TargetVulnerableLocations_Player.Length; i++)
{
if (!IsZero(TargetingComp.TargetVulnerableLocations_Player[i]))
{
DrawTargetingTeammateIcon( C, i );
}
}
CanvasTexture.bNeedsUpdate = true;
}
/**
* @brief Draws an icon when human players are hidden but in the field of view
*
* @param PRI Player's PlayerReplicationInfo
* @param IconWorldLocation The "player's" location in the world
*/
simulated function DrawTargetingTeammateIcon( Canvas Canvas, int index )
{
local vector WorldPos;
local float IconSize, IconScale;
local vector2d ScreenPos;
// Project world pos to canvas
WorldPos = TargetingComp.TargetVulnerableLocations_Player[index];
ScreenPos = WorldToCanvas(Canvas, WorldPos);
// calculate scale based on resolution and distance
IconScale = FMin(float(Canvas.SizeX) / 1024.f, 1.f);
// Scale down up to 40 meters away, with a clamp at 20% size
IconScale *= FClamp(1.f - VSize(WorldPos - Instigator.Location) / 4000.f, 0.2f, 1.f);
// Apply size scale
IconSize = 300.f * IconScale;
ScreenPos.X -= IconSize / 2.f;
ScreenPos.Y -= IconSize / 2.f;
// Off-screen check
if (ScreenPos.X < 0 || ScreenPos.X > Canvas.SizeX || ScreenPos.Y < 0 || ScreenPos.Y > Canvas.SizeY)
{
return;
}
Canvas.SetPos( ScreenPos.X, ScreenPos.Y );
// Pick the color of the targeting box to draw
if (TargetingComp.LockedHitZone[1] >= 0 && index == TargetingComp.LockedHitZone[1])
{
Canvas.DrawTile(LockedTeammateHitZoneIcon, IconSize, IconSize, 0, 0,
LockedTeammateHitZoneIcon.SizeX, LockedTeammateHitZoneIcon.SizeY, GreenIconColor);
}
else if (TargetingComp.PendingHitZone[1] >= 0 && index == TargetingComp.PendingHitZone[1])
{
Canvas.DrawTile(LockedTeammateHitZoneIcon, IconSize, IconSize, 0, 0,
LockedTeammateHitZoneIcon.SizeX, LockedTeammateHitZoneIcon.SizeY, YellowIconColor);
}
else
{
Canvas.DrawTile(DefaultTeammateHitZoneIcon, IconSize, IconSize, 0, 0,
DefaultTeammateHitZoneIcon.SizeX, DefaultTeammateHitZoneIcon.SizeY, BlueIconColor);
}
}
/*********************************************************************************************
@name Reload / recharge
********************************************************************************************* */
/** Healing charge doesn't count as ammo for purposes of inventory management (e.g. switching) */
simulated function bool HasAnyAmmo()
{
if (HasSpareAmmo() || HasAmmo(DEFAULT_FIREMODE))
{
return true;
}
return false;
}
defaultproperties
{
// Content
PackageKey="HRG_Incision"
FirstPersonMeshName="WEP_1P_HRG_Incision_MESH.WEP_1stP_HRG_Incision"
FirstPersonAnimSetNames(0)="wep_1p_hrg_incision_anim.wep_1p_hrg_incision_anim"
PickupMeshName="wep_3p_HRG_Incision_MESH.Wep_3rdP_HRG_Incision_Pickup"
AttachmentArchetypeName="wep_hrg_incision_arch.Wep_HRG_Incision_3P_Updated"
MuzzleFlashTemplateName="wep_hrg_incision_arch.Wep_HRG_Incision_MuzzleFlash"
// Inventory / Grouping
InventorySize=8
WeaponSelectTexture=Texture2D'WEP_UI_HRG_Incision_Item_TEX.UI_WeaponSelect_HRG_Incision'
SecondaryAmmoTexture=Texture2D'UI_SecondaryAmmo_TEX.MedicDarts'
//Perk
AssociatedPerkClasses.Empty()
AssociatedPerkClasses(0)=class'KFPerk_FieldMedic'
// Ammo
MagazineCapacity[0]=1
SpareAmmoCapacity[0]=39
InitialSpareMags[0]=12
bCanBeReloaded=true
bReloadFromMagazine=true
AmmoPickupScale[0]=3.0
MagazineCapacity[1]=100
bCanRefillSecondaryAmmo=false
bNoMagazine=true
// DEFAULT_FIREMODE
FireModeIconPaths(DEFAULT_FIREMODE)=Texture2D'UI_SecondaryAmmo_TEX.UI_FireModeSelect_AutoTarget'
FiringStatesArray(DEFAULT_FIREMODE)=WeaponSingleFiring
WeaponFireTypes(DEFAULT_FIREMODE)=EWFT_InstantHit
WeaponProjectiles(DEFAULT_FIREMODE)=class'KFProj_Bullet_HRGIncisionHurt'
InstantHitDamage(DEFAULT_FIREMODE)=400
InstantHitDamageTypes(DEFAULT_FIREMODE)=class'KFDT_Ballistic_HRGIncisionHurt'
FireInterval(DEFAULT_FIREMODE)=0.1 //0.4
PenetrationPower(DEFAULT_FIREMODE)=10.0
Spread(DEFAULT_FIREMODE)=0.005
// ALT_FIREMODE
FireModeIconPaths(ALTFIRE_FIREMODE)=Texture2D'ui_firemodes_tex.UI_FireModeSelect_MedicDart'
FiringStatesArray(ALTFIRE_FIREMODE)=WeaponSingleFiring
WeaponFireTypes(ALTFIRE_FIREMODE)=EWFT_InstantHit
WeaponProjectiles(ALTFIRE_FIREMODE)=class'KFProj_Bullet_HRGIncisionHeal'
FireInterval(ALTFIRE_FIREMODE)=+0.175
InstantHitDamage(ALTFIRE_FIREMODE)=75
InstantHitDamageTypes(ALTFIRE_FIREMODE)=class'KFDT_Ballistic_HRGIncisionHeal'
InstantHitMomentum(ALTFIRE_FIREMODE)=50000.f
Spread(ALTFIRE_FIREMODE)=0.005
PenetrationPower(ALTFIRE_FIREMODE)=10.0
AmmoCost(ALTFIRE_FIREMODE)=50
// BASH_FIREMODE
InstantHitDamageTypes(BASH_FIREMODE)=class'KFDT_Bludgeon_HRGIncision'
InstantHitDamage(BASH_FIREMODE)=30
// Lock-on
TargetingCompClass=class'KFTargetingWeaponComponent_HRGIncision'
MedicCompClass=class'KFMedicWeaponComponent_HRGIncision'
LockedTeammateHitZoneIcon=Texture2D'Wep_Scope_TEX.Wep_1stP_Yellow_Red_Target'
DefaultTeammateHitZoneIcon=Texture2D'Wep_Scope_TEX.Wep_1stP_Blue_Target'
GreenIconColor=(R=1, G=255, B=1)
// Weapon Upgrade stat boosts
WeaponUpgrades[1]=(Stats=((Stat=EWUS_Damage0, Scale=1.2f), (Stat=EWUS_Damage1, Scale=1.2f), (Stat=EWUS_Weight, Add=1), (Stat=EWUS_HealFullRecharge, Scale=0.9f)))
}