Regen Volume (UT2003)

  1. Introduction
  2. Code source
  3. Explication du code

Créé le 10/05/2003
Dernière mise à jour le 10/05/2003

1) Introduction

Il s'agit d'un volume que le mappeur peut ajouter dans sa map une fois le package du script ouvert. La particuliarité de ce volume est qu'il régénère les joueurs qui se trouvent a l'intérieur de celui-ci.
Le problème de ces actors si spéciaux que sont les volumes, c'est qu'ils ne gèrent pas les functions de temps (Timer(), Tick()) or on a besoin de Timer() pour régénéré les joueurs chaque seconde.
Il faut donc spawné un actor exprés (VolumeTimer) qui va s'en occupé, son Timer() lancera la function TimerPop() du volume.

Top

2) Code source

//===========================================
// RegenVolume
// created by Crokx
// 10/05/2003 (dd/mm/yyyy)
//===========================================
class RegenVolume extends PhysicsVolume;


var() int RegenAmount;
var() int RegenLimit;
var VolumeTimer RegenTimer;


//=============================
// Dés le début dans la partie
//=============================
simulated function PostBeginPlay()
{
    Super.PostBeginPlay();

    RegenAmount = Min(RegenAmount, RegenLimit);
    RegenTimer = Spawn(class'VolumeTimer', SELF);
    if(RegenTimer != None) RegenTimer.V = SELF; // inutile car en spawnant le volume Timer avec un Owner SELF (second paramètre) il s'assigne tout seul cette variable dans son propre code
}


//===============================
// Appelé par RegenTimer.Timer()
//===============================
function TimerPop(VolumeTimer VT)
{
    local Pawn P;

    if(VT != RegenTimer) return;

    ForEach TouchingActors(class'Pawn', P)
    {
        if((P != None)
        && (P.IsPlayerPawn())
        && (P.Health < RegenLimit))
            P.Health = Min(P.Health+RegenAmount, RegenLimit);
    }
}


//=========
// Default
//=========
defaultproperties
{
    RegenAmount=5
    RegenLimit=100
}

Top

3) Explication du code

Déclaration des variables:

Dés le début dans la partie:

Le RegenTimer lance dans son Timer() le TimerPop() du volume:

Top