|
|
(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}}]]
| + | |