Legacy:Fyfe/PawnFactory: Difference between revisions

From Unreal Wiki, The Unreal Engine Documentation Site
Fyfe (talk | contribs)
Added PawnCreated(), and added some code to set bEnabled to false while PawnCount == MaxPawnCount or if PawnClass isn't set.
 
Redirecting to UE2:PawnFactory
 
(4 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{classbox| [[Legacy:UT2004|UT2004]] :: [[Legacy:Actor|Actor]] >> PawnFactory (Custom)}}
#REDIRECT [[UE2:PawnFactory]]
 
A generic factory for spawning pawns. The pawns need to be a sub-class of [[Legacy:Fyfe/AnotherPawn|AnotherPawn]].
 
'''NOTE:''' If your looking for a factory for vehicles check out [[Legacy:SVehicleFactory|Engine.SVehicleFactory]]
 
==Properties==
 
===Main===
; bool bEnabled : Factory is enabled by default.
; class<[[Legacy:Fyfe/AnotherPawn|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( [[Legacy:Fyfe/AnotherPawn|AnotherPawn]] Pawn ) : Called by the factory when a pawn is created.
; PawnDestroyed( [[Legacy:Fyfe/AnotherPawn|AnotherPawn]] Pawn ) : Called by the pawn when it's destroyed.
; Trigger( [[Legacy:Actor|Actor]] Other, [[Legacy:Pawn|Pawn]] EventInstigator ) : Spawns a new pawn if <code>PawnClass</code> is set and we haven't reached the <code>MaxPawnCount</code>.
 
==Code==
 
<div class="hidden-block"><span class="hint"></span><div class="hidden">
<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></div></div>
 
==Related Topics==
* [[Legacy:Third-Party Components|Third-Party Components]]
 
==Discussion==
 
'''fyfe:''' Nothing overly fancy or original, it's based off of [[Legacy:SVehicleFactory|Engine.SVehicleFactory]].
 
'''fyfe:''' Added <code>PawnCreated()</code>, and added some code to set <code>bEnabled</code> to false while <code>PawnCount == MaxPawnCount</code> or if <code>PawnClass</code> isn't set.
 
[[Category:Legacy Custom Class|{{PAGENAME}}]]

Latest revision as of 10:23, 29 April 2008

Redirect to: