//============================================================================= // xPickUpBase. // This is the base class of all pickup-spawners. When placing pickups in // levels, place pickup bases instead since these will spawn the actual // pickups. //============================================================================= class xPickUpBase extends Actor abstract placeable native; var(PickUpBase) class PowerUp; // pick-up class to spawn with this base var(PickUpBase) float SpawnHeight; // height above this base at which the power up will spawn var(PickUpBase) class SpiralEmitter; // emitter which spawns particles when myPickup is available var(PickUpBase) float ExtraPathCost; // assigned to the inventory spot var PickUp myPickUp; // reference to the pick up spawned with this base var Emitter myEmitter; // reference to the emitter spawned with this base var InventorySpot myMarker; // inventory spot marker associated with this pick-up base var(PickUpBase) bool bDelayedSpawn; // #ifdef _KF_ var() bool bExcludeFromNavigation; // If true, this pickup won't become part of the navigation network. // #endif /* The UnrealEd console command "NewPickupBases" will apply the following properties to this pickup base * Used to apply UT2004's new pickup base staticmeshes because we can't just universally change StaticMesh * as that would cause them to be unlit in all old maps */ var StaticMesh NewStaticMesh; var vector NewPrePivot; var float NewDrawScale; simulated event PostBeginPlay() { Super.PostBeginPlay(); if ( PowerUp != None ) { if( Level.NetMode != NM_Client ) { SpawnPickup(); if ( bDelayedSpawn && (myPickup != None) ) { if ( myPickup.IsInState('Pickup') ) myPickup.GotoState( 'WaitingForMatch' ); if ( myPickup.myMarker != None ) myPickup.myMarker.bSuperPickup = true; } } if ( Level.NetMode != NM_DedicatedServer ) PowerUp.static.StaticPrecache(Level); } if( !bHidden && (Level.NetMode != NM_DedicatedServer) ) { myEmitter = Spawn(SpiralEmitter,,,Location + vect(0,0,40)); SetDrawScale(Default.DrawScale); } } function bool CheckForErrors() { local Actor HitActor; local vector HitLocation, HitNormal; HitActor = Trace(HitLocation, HitNormal,Location - Vect(0,0,10), Location,false); if ( HitActor == None ) { log(self$" FLOATING"); return true; } return Super.CheckForErrors(); } function byte GetInventoryGroup() { return 0; } function TurnOn(); function SpawnPickup() { if( PowerUp == None ) return; myPickUp = Spawn(PowerUp,,,Location + SpawnHeight * vect(0,0,1), rot(0,0,0)); if (myPickUp != None) { myPickUp.PickUpBase = self; myPickup.Event = event; } if (myMarker != None) { myMarker.markedItem = myPickUp; myMarker.ExtraCost = ExtraPathCost; if (myPickUp != None) myPickup.MyMarker = MyMarker; } else log("No marker for "$self); } defaultproperties { RemoteRole=ROLE_None bStatic=true DrawType=DT_Mesh Style=STY_Normal CollisionRadius=+35.0 CollisionHeight=+35.0 SpawnHeight=+50.0000 // don't collide with anything! bCollideActors=False bCollideWorld=False bBlockActors=False bProjTarget=True AmbientGlow=64 CullDistance=+7000.0 }