//----------------------------------------------------------- // //----------------------------------------------------------- class ObjCondition_WaveCounter extends ObjCondition_Counter hidecategories(ObjCondition_Counter); var const name WaveDesignerName; var int LastWaveIdx; /* Tag of the WaveDesigner tied to this wave counter */ var() name DesignerTag; var() bool bUseCurrentWave; var() int AssociatedWaveIndex; var() int AssociatedCycleIndex; var() bool bSumOfAllCycles; var int NumStragglers; function ConditionActivated(pawn ActivatingPlayer) { local KF_StoryWaveDesigner WaveDesigner; NumCounted = 0; Super.ConditionActivated(ActivatingPlayer); foreach GetObjOwner().AllActors(class 'KF_StoryWaveDesigner' , WaveDesigner,DesignerTag) { SetTargetActor(WaveDesignerName,WaveDesigner); break; } } function ConditionDeActivated() { super.ConditionDeActivated(); // let's actually let the objective control this stuff manually ... // WaveDesigner.Waves[GetAssociatedWaveIndex()].WaveController.AbortWave(); } /* returns the percentage of completion for this condition */ function float GetCompletionPct() { local KF_StoryWaveDesigner WaveDesigner; WaveDesigner = KF_StoryWaveDesigner(GetTargetActor(WaveDesignername)); if(WaveDesigner == none) { // log("WARNING - no Wave Designer associated with : "@name,'Story_Debug'); return 0.f; } if(WaveDesigner.Waves[GetAssociatedWaveIndex()].WaveController.bActive) { if(bSumOfAllCycles) { NumToCount = WaveDesigner.Waves[GetAssociatedWaveIndex()].WaveController.GetMaxMonsters(); } else { NumToCount = WaveDesigner.Waves[GetAssociatedWaveIndex()].WaveController.GetCycleMaxZEDs(AssociatedCycleIndex) ; } } else { NumToCount = WaveDesigner.Waves[GetAssociatedWaveIndex()].WaveController.NumStragglers; NumCounted = NumToCount - GetObjOwner().StoryGI.NumMonsters; } /* NO ZEDS . Complete automatically */ if(NumToCount <= 0) { return 1.f; } return Super.GetCompletionPct(); } function int GetAssociatedWaveIndex() { local int WaveIdx; if(bUseCurrentWave) { WaveIdx = KF_StoryWaveDesigner(GetTargetActor(WaveDesignername)).CurrentWaveIdx ; } else { WaveIdx = AssociatedWaveIndex; } return WaveIdx; } /* We need to ensure that the counter is reset between waves */ function ConditionTick(float DeltaTime) { local int NewWaveIdx; local KF_StoryWaveDesigner WaveDesigner; Super.ConditionTick(DeltaTime); WaveDesigner = KF_StoryWaveDesigner(GetTargetActor(WaveDesignername)); if(WaveDesigner != none) { NewWaveIdx = GetAssociatedWaveIndex(); if(NewWaveIdx != LastWaveIdx) { OnWaveChange(); } LastWaveIdx = NewWaveIdx; } } function OnWaveChange() { NumCounted = 0; } function Trigger( actor Other, pawn EventInstigator) { Super.Trigger(Other,EventInstigator); // log("You have killed : "@NumCounted@"ZEDS out of : "@NumToCount,'Story_Debug'); } /* Difficulty scaling for enemies is handled in the Wave Controller, so don't do it twice. */ function float GetTotalDifficultyModifier() { return 1.f; } DefaultProperties { WaveDesignerName = "WaveDesigner" CountType = CT_Default bUseCurrentWave = true bSumOfAllCycles = true }