I search for solutions in this order: Past Code, Unreal Source, Wiki, BUF, groups.yahoo, google, screaming at monitor. – RegularX

UE2:PawnFactory

From Unreal Wiki, The Unreal Engine Documentation Site
(Redirected from Legacy:Fyfe/PawnFactory)
Jump to: navigation, search

A generic factory for spawning pawns. The pawns used needs to be a sub-class of AnotherPawn.

NOTE: If your looking for a factory for vehicles check out Engine.SVehicleFactory

Properties[edit]

Visible[edit]

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[edit]

int PawnCount 
The current number of pawns this factory has created.

Events[edit]

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 the MaxPawnCount.

Code[edit]

UE2 Actor >> PawnFactory (custom)
This class in other games:
U2XMP
// ============================================================================
// 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< SEMI >		// 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
}

Notes[edit]

fyfe: Added PawnCreated(), and added some code to set bEnabled to false while PawnCount == MaxPawnCount or if PawnClass isn't set.

Related Topics[edit]