Legacy:Fyfe/PawnFactory
A generic factory for spawning pawns. The pawns need to be a sub-class of AnotherPawn.
NOTE: If your looking for a factory for vehicles check out Engine.SVehicleFactory
Properties
Main
- bool bEnabled
- Factory is enabled by default.
- class<AnotherPawn> PawnClass
- The pawn to spawn.
- int MaxPawnCount
- The max number of pawns this factory can create.
Hidden
- int PawnCount
- The current number of pawns this factory has created.
Events
- PawnCreated( AnotherPawn Pawn )
- Called by the factory when a pawn is created.
- PawnDestroyed( AnotherPawn Pawn )
- Called by the pawn when it's destroyed.
- Trigger( Actor Other, Pawn EventInstigator )
- Spawns a new pawn if
PawnClass
is set and we haven't reached theMaxPawnCount
.
Code
<uscript> // ============================================================================ // PawnFactory // Copyright (c) 2006 by Andrew Fyfe <andrew@neptune-one.net> // This program is free software; you can redistribute and/or modify // it under the terms of the Lesser Open Unreal Mod License version 1.1. // // A generic factory for spawning pawns. The pawns need to be a sub-class of // NeptuneOne.AnotherPawn. // // NOTE: If your looking for a factory for vehicles check out // Engine.SVehicleFactory // ============================================================================
class PawnFactory extends Actor placeable;
// ============================================================================
// Properties
// ============================================================================
var() bool bEnabled; // Factory is enabled by default. var() class<AnotherPawn> PawnClass; // The pawn to spawn. var() int MaxPawnCount; // The max number of pawns this factory can create. var int PawnCount; // The current number of pawns this factory has created.
// ============================================================================
// PawnCreated
//
// Called by the factory when a pawn is created.
// ============================================================================
event PawnCreated( AnotherPawn Pawn ) { PawnCount++; Pawn.ParentFactory = self;
if ( PawnCount >= MaxPawnCount ) { Log( "PawnFactory.Trigger(): MaxPawnCount reached, I'm not going to spawn another pawn.", 'NeptuneOne' ); bEnabled = false; } }
// ============================================================================
// PawnDestroyed
//
// Called by the pawn when it's destroyed.
// ============================================================================
event PawnDestroyed( AnotherPawn Pawn ) { PawnCount--;
if ( PawnCount < MaxPawnCount ) { Log( "PawnFactory.PawnDestroyed(): The factory is enabled again.", 'NeptuneOne' ); bEnabled = true; } }
// ============================================================================
// Trigger
//
// Spawns a new pawn if PawnClass is set and we haven't reached the
// MaxPawnCount.
// ============================================================================
event Trigger( Actor Other, Pawn EventInstigator ) { local AnotherPawn CreatedPawn;
if ( !bEnabled ) return;
if ( PawnClass == None ) { // Oops somebody forgot to set a PawnClass. Warn( "PawnFactory.Trigger(): "@self@" has no PawnClass! Disabling factory!" ); bEnabled = false; return; }
CreatedPawn = Spawn( PawnClass, , , Location, Rotation ); if ( CreatedPawn != None ) PawnCreated( CreatedPawn ); }
// ============================================================================
// Defaults
// ============================================================================
defaultproperties { bEnabled=true MaxPawnCount=1
bHidden=true Texture=S_Keypoint RemoteRole=ROLE_None bNoDelete=true bDirectional=true }
</uscript>Related Topics
Discussion
fyfe: Nothing overly fancy or original, it's based off of Engine.SVehicleFactory.
fyfe: Added PawnCreated()
, and added some code to set bEnabled
to false while PawnCount == MaxPawnCount
or if PawnClass
isn't set.