202 lines
5.5 KiB
Text
202 lines
5.5 KiB
Text
|
|
||
|
|
||
|
object objective {
|
||
|
void syncFields();
|
||
|
void preinit();
|
||
|
void init();
|
||
|
void destroy();
|
||
|
|
||
|
float objectiveIconNumber;
|
||
|
float objectiveIcon;
|
||
|
|
||
|
void OnFinishedChanged();
|
||
|
|
||
|
void SetupIcons();
|
||
|
void ClearIcons();
|
||
|
|
||
|
void UpdateObjectives( string prefix );
|
||
|
|
||
|
void vOnLocalTeamChanged();
|
||
|
|
||
|
void vOnDeploy();
|
||
|
|
||
|
void vFinishObjective();
|
||
|
void vStartObjective();
|
||
|
|
||
|
float objectiveIndex;
|
||
|
object stroggTeam;
|
||
|
object gdfTeam;
|
||
|
|
||
|
boolean finished;
|
||
|
|
||
|
handle gdfShortText;
|
||
|
handle stroggShortText;
|
||
|
|
||
|
entity objectiveOverride;
|
||
|
}
|
||
|
|
||
|
void objective::preinit() {
|
||
|
objectiveIcon = -1;
|
||
|
objectiveIconNumber = -1;
|
||
|
|
||
|
objectiveIndex = getFloatKeyWithDefault( "objective_index", -1 );
|
||
|
|
||
|
vOnDeploy();
|
||
|
|
||
|
SetupIcons();
|
||
|
vFinishObjective();
|
||
|
}
|
||
|
|
||
|
void objective::vOnLocalTeamChanged() {
|
||
|
OnFinishedChanged();
|
||
|
vOnDeploy();
|
||
|
}
|
||
|
|
||
|
void objective::vOnDeploy() {
|
||
|
if ( objectiveIndex >= 0 ) {
|
||
|
handle gdfText = sys.localizeString( getKeyWithDefault( "text_objective_gdf", "" ) );
|
||
|
handle stroggText = sys.localizeString( getKeyWithDefault( "text_objective_strogg", "" ) );
|
||
|
gdfShortText = sys.localizeString( getKeyWithDefault( "text_short_objective_gdf", "" ) );
|
||
|
stroggShortText = sys.localizeString( getKeyWithDefault( "text_short_objective_strogg", "" ) );
|
||
|
|
||
|
objManager.InitObjectiveUI( objectiveIndex, gdfText,
|
||
|
stroggText,
|
||
|
gdfShortText,
|
||
|
stroggShortText,
|
||
|
getKeyWithDefault( "mtr_objective_gdf", "guis/nodraw" ),
|
||
|
getKeyWithDefault( "mtr_objective_strogg", "guis/nodraw" ));
|
||
|
|
||
|
SetupIcons();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void objective::syncFields() {
|
||
|
syncBroadcast( "finished" );
|
||
|
syncCallback( "finished", "OnFinishedChanged" );
|
||
|
}
|
||
|
|
||
|
void objective::init() {
|
||
|
}
|
||
|
|
||
|
void objective::OnFinishedChanged() {
|
||
|
if ( finished ) {
|
||
|
vFinishObjective();
|
||
|
} else {
|
||
|
vStartObjective();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void objective::destroy() {
|
||
|
ClearIcons();
|
||
|
}
|
||
|
|
||
|
void objective::UpdateObjectives( string prefix ) {
|
||
|
if ( objectiveIndex < 0 ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
objManager.setObjectiveState( stroggTeam, objectiveIndex, getFloatKey( prefix + "_objective_status_strogg" ) );
|
||
|
objManager.setObjectiveIcon( stroggTeam, objectiveIndex, getKey( prefix + "_objective_icon_strogg" ) );
|
||
|
|
||
|
objManager.setObjectiveState( gdfTeam, objectiveIndex, getFloatKey( prefix + "_objective_status_gdf" ) );
|
||
|
objManager.setObjectiveIcon( gdfTeam, objectiveIndex, getKey( prefix + "_objective_icon_gdf" ) );
|
||
|
}
|
||
|
|
||
|
void objective::SetupIcons() {
|
||
|
entity localPlayer = sys.getLocalPlayer();
|
||
|
if( localPlayer == $null_entity ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
object gameTeam = localPlayer.getGameTeam();
|
||
|
|
||
|
ClearIcons();
|
||
|
|
||
|
float size;
|
||
|
float unknownSize;
|
||
|
//size = getFloatKey( "icon_size_cm" );
|
||
|
size = 16;
|
||
|
//unknownSize = getFloatKeyWithDefault( "icon_unknown_size_cm", size / 2 );
|
||
|
unknownSize = 16;
|
||
|
vector v;
|
||
|
v_x = 4;
|
||
|
v_y = 4;
|
||
|
v_z = 0;
|
||
|
|
||
|
if ( size && gameTeam != $null_entity ) {
|
||
|
objectiveIcon = sys.allocCMIcon( self, getFloatKeyWithDefault( "icon_sort_cm", -6 ) );
|
||
|
|
||
|
sys.setCMIconSize( objectiveIcon, size );
|
||
|
sys.setCMIconUnknownSize( objectiveIcon, unknownSize );
|
||
|
if ( finished || objectiveIndex < 0 || g_primaryObjectiveIndex != objectiveIndex ) {
|
||
|
sys.setCMIconFlag( objectiveIcon, CMF_ONLYSHOWONFULLVIEW );
|
||
|
}
|
||
|
if( g_primaryObjectiveIndex == objectiveIndex ) {
|
||
|
sys.clearCMIconFlag( objectiveIcon, CMF_ONLYSHOWONFULLVIEW );
|
||
|
}
|
||
|
sys.setCMIconFlag( objectiveIcon, CMF_ALWAYSKNOWN );
|
||
|
|
||
|
if ( g_primaryObjectiveIndex != objectiveIndex ) {
|
||
|
string material = getKeyWithDefault( "mtr_objective_" + gameTeam.getName() + "_desat", "guis/nodraw" );
|
||
|
if ( material == "guis/nodraw" ) {
|
||
|
string materialColored = getKeyWithDefault( "mtr_objective_" + gameTeam.getName(), "guis/nodraw" );
|
||
|
if ( materialColored != "guis/nodraw" ) {
|
||
|
sys.warning( "Material not found: 'mtr_objective_" + gameTeam.getName() + "_desat' (" + materialColored + ")" );
|
||
|
}
|
||
|
}
|
||
|
sys.setCMIconMaterial( objectiveIcon, GetMaterial( material ) );
|
||
|
} else {
|
||
|
sys.setCMIconMaterial( objectiveIcon, GetMaterial( getKeyWithDefault( "mtr_objective_" + gameTeam.getName(), "guis/nodraw" ) ) );
|
||
|
}
|
||
|
//sys.setCMIconOrigin( objectiveIcon, getVectorKey( "icon_offset_cm" ) );
|
||
|
sys.setCMIconOrigin( objectiveIcon, v );
|
||
|
|
||
|
if ( getFloatKey( "icon_team_color_cm" ) ) {
|
||
|
sys.setCMIconColorMode( objectiveIcon, CM_ALLEGIANCE );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//size = getFloatKey( "icon_size_number_cm" );
|
||
|
size = 10;
|
||
|
if ( size ) {
|
||
|
objectiveIconNumber = sys.allocCMIcon( self, getFloatKeyWithDefault( "icon_sort_number_cm", -7 ) );
|
||
|
|
||
|
sys.setCMIconUnknownSize( objectiveIconNumber, 0 );
|
||
|
sys.setCMIconSize( objectiveIconNumber, size );
|
||
|
sys.setCMIconFlag( objectiveIconNumber, CMF_ALWAYSKNOWN );
|
||
|
if ( finished || objectiveIndex < 0 ) {
|
||
|
sys.setCMIconFlag( objectiveIconNumber, CMF_ONLYSHOWONFULLVIEW );
|
||
|
}
|
||
|
sys.setCMIconMaterial( objectiveIconNumber, GetMaterial( getKey( "mtr_icon_number" ) ) );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void objective::ClearIcons() {
|
||
|
if ( objectiveIcon != -1 ) {
|
||
|
sys.freeCMIcon( self, objectiveIcon );
|
||
|
objectiveIcon = -1;
|
||
|
}
|
||
|
|
||
|
if ( objectiveIconNumber != -1 ) {
|
||
|
sys.freeCMIcon( self, objectiveIconNumber );
|
||
|
objectiveIconNumber = -1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void objective::vFinishObjective() {
|
||
|
finished = true;
|
||
|
if ( objectiveIndex < 0 ) {
|
||
|
ClearIcons();
|
||
|
} else {
|
||
|
SetupIcons();
|
||
|
}
|
||
|
UpdateObjectives( "finish" );
|
||
|
}
|
||
|
|
||
|
void objective::vStartObjective() {
|
||
|
finished = false;
|
||
|
SetupIcons();
|
||
|
UpdateObjectives( "start" );
|
||
|
}
|