Legacy:Fyfe/PawnFactory - Unreal Wiki

# Legacy:Fyfe/PawnFactory

### From Unreal Wiki, The Unreal Engine Documentation Site

< Legacy:Fyfe
UT2004 :: Actor >> PawnFactory (Custom)

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

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

## Properties

### Main

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

    // ============================================================================
    // 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
    }

## Related Topics

- Third-Party Components

## Discussion

fyfe: Nothing overly fancy or original, it's based off of Engine.SVehicleFactory.

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

Category: Legacy Custom Class (UT2004)

##### Views

- Legacy
- Discussion
- Current revision

##### Search