Once I get that upgrade to 36-hour days, I will tackle that. – Mychaeel

UE2:PawnFactory

From Unreal Wiki, The Unreal Engine Documentation Site
Revision as of 17:36, 8 April 2008 by DalinSeivewright (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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

Visible

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

Code

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

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

Related Topics