There is no spoon

Difference between revisions of "Legacy:Fyfe/PawnFactory"

From Unreal Wiki, The Unreal Engine Documentation Site
Jump to: navigation, search
(Added PawnCreated(), and added some code to set bEnabled to false while PawnCount == MaxPawnCount or if PawnClass isn't set.)
m (Redirecting to Open Source/Pawn Factory)
(One intermediate revision by one other user not shown)
Line 1: Line 1:
{{classbox| [[Legacy:UT2004|UT2004]] :: [[Legacy:Actor|Actor]] >> PawnFactory (Custom)}}
+
#REDIRECT [[Open Source/Pawn Factory]]
 
+
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}}]]
+

Revision as of 17:12, 7 April 2008