113 lines
2.6 KiB
Ucode
113 lines
2.6 KiB
Ucode
//=============================================================================
|
|
// TeamInfo.
|
|
// Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
|
|
//=============================================================================
|
|
class TeamInfo extends ReplicationInfo
|
|
native(ReplicationInfo)
|
|
nativereplication;
|
|
|
|
var localized string TeamName;
|
|
var int Size; //number of players on this team in the level
|
|
var float Score;
|
|
var repnotify int TeamIndex;
|
|
var color TeamColor;
|
|
|
|
cpptext
|
|
{
|
|
INT* GetOptimizedRepList( BYTE* InDefault, FPropertyRetirement* Retire, INT* Ptr, UPackageMap* Map, UActorChannel* Channel );
|
|
}
|
|
|
|
replication
|
|
{
|
|
// Variables the server should send to the client.
|
|
if( bNetDirty && (Role==ROLE_Authority) )
|
|
Score;
|
|
if ( bNetInitial && (Role==ROLE_Authority) )
|
|
TeamName, TeamIndex;
|
|
}
|
|
|
|
simulated event ReplicatedEvent(name VarName)
|
|
{
|
|
//`log(GetFuncName()@`showvar(VarName));
|
|
if (VarName == 'TeamIndex')
|
|
{
|
|
if (WorldInfo.GRI != None)
|
|
{
|
|
// register this TeamInfo instance now
|
|
WorldInfo.GRI.SetTeam(TeamIndex, self);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
Super.ReplicatedEvent(VarName);
|
|
}
|
|
}
|
|
|
|
simulated event Destroyed()
|
|
{
|
|
local TeamInfo OtherTeam;
|
|
|
|
Super.Destroyed();
|
|
|
|
// see if there's another TeamInfo that should take our spot in the GRI
|
|
// (this could happen after seamless travel as there may be a time during which both the old and new TeamInfos are around)
|
|
if (WorldInfo.GRI != None)
|
|
{
|
|
foreach DynamicActors(class'TeamInfo', OtherTeam)
|
|
{
|
|
if (OtherTeam != self && OtherTeam.TeamIndex == TeamIndex)
|
|
{
|
|
WorldInfo.GRI.SetTeam(TeamIndex, OtherTeam);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function bool AddToTeam( Controller Other )
|
|
{
|
|
// make sure loadout works for this team
|
|
if ( Other == None )
|
|
{
|
|
`log("Added none to team!!!");
|
|
return false;
|
|
}
|
|
|
|
if (Other.PlayerReplicationInfo == None)
|
|
{
|
|
`Warn(Other @ "is missing PlayerReplicationInfo");
|
|
ScriptTrace();
|
|
return false;
|
|
}
|
|
|
|
Size++;
|
|
Other.PlayerReplicationInfo.SetPlayerTeam(Self);
|
|
return true;
|
|
}
|
|
|
|
function RemoveFromTeam(Controller Other)
|
|
{
|
|
Size--;
|
|
if ( Other != None && Other.PlayerReplicationInfo != None )
|
|
{
|
|
Other.PlayerReplicationInfo.SetPlayerTeam(None);
|
|
}
|
|
}
|
|
|
|
simulated function string GetHumanReadableName()
|
|
{
|
|
return TeamName;
|
|
}
|
|
|
|
simulated native function byte GetTeamNum();
|
|
|
|
defaultproperties
|
|
{
|
|
TickGroup=TG_DuringAsyncWork
|
|
|
|
TeamIndex=-1 // can't be zero, otherwise the property will not be replicated and the notify will not fire
|
|
NetUpdateFrequency=2
|
|
TeamColor=(r=255,g=64,b=64,a=255)
|
|
}
|