FG28_Kodiak |
10-25-2012 01:16 PM |
Update: Labels working now ;)
Updated Update: Not in Multiplayer :(
My testscript use the Missionmenu to create the Labels:
Code:
using System;
using maddox.game;
using maddox.game.world;
using System.Collections.Generic;
using maddox.GP;
public class Mission : AMission
{
class Recon
{
public Player ReconPlayer { get; internal set; }
public List<GPUserLabel> Labels = new List<GPUserLabel>();
public Recon(Player player, GPUserLabel userLabel)
{
ReconPlayer = player;
if (userLabel != null)
{
Labels.Add(userLabel);
}
}
}
List<Recon> ActiveRecons = new List<Recon>();
public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex)
{
base.OnPlaceEnter(player, actor, placeIndex);
SetMainMenu(player);
}
enum MenuID
{
MainMenu,
ReconMenu,
}
public void SetMainMenu(Player player)
{
GamePlay.gpSetOrderMissionMenu(player, false, (int)MenuID.MainMenu, new string[] { "Recon" }, new bool[] { true });
}
public void SetReconMenu(Player player)
{
GamePlay.gpSetOrderMissionMenu(player, true, (int)MenuID.ReconMenu, new string[] { "Set AAA Mark", "Set Tank Mark", "Set Plane Mark", "Set Factory Mark", "Set Car Mark", "Set Label", "Set Ship Mark", "Set WayPoint Mark", "Delete Marks" }, new bool[] { false, false, false, false, false, false, false, false, false });
}
public override void OnOrderMissionMenuSelected(Player player, int ID, int menuItemIndex)
{
base.OnOrderMissionMenuSelected(player, ID, menuItemIndex);
if (ID == 0)
{
// main menu
if (menuItemIndex == 1)
{
SetReconMenu(player);
}
else
{
SetMainMenu(player);
}
}
else if (ID == (int)MenuID.ReconMenu)
{
switch (menuItemIndex)
{
case 1:
AddReconMark(player, GPUserIconType.AAGun);
SetMainMenu(player);
break;
case 2:
AddReconMark(player, GPUserIconType.Tank);
SetMainMenu(player);
break;
case 3:
AddReconMark(player, GPUserIconType.Plane);
SetMainMenu(player);
break;
case 4:
AddReconMark(player, GPUserIconType.Factory);
SetMainMenu(player);
break;
case 5:
AddReconMark(player, GPUserIconType.Car);
SetMainMenu(player);
break;
case 6:
AddReconMark(player, GPUserIconType.Label);
SetMainMenu(player);
break;
case 7:
AddReconMark(player, GPUserIconType.Ship);
SetMainMenu(player);
break;
case 8:
AddReconMark(player, GPUserIconType.Waypoint);
SetMainMenu(player);
break;
case 9:
RemoveMarks(player);
SetMainMenu(player);
break;
default:
SetMainMenu(player);
break;
}
}
}
private void RemoveMarks(Player player)
{
if (ActiveRecons.Exists(item => item.ReconPlayer == player))
{
Recon recon = ActiveRecons.Find(item => item.ReconPlayer == player);
recon.Labels.ForEach(item => GamePlay.gpDeleteUserLabel(item));
recon.Labels.Clear();
}
}
private void AddReconMark(Player player, GPUserIconType iconType)
{
AiActor actor = player.Place();
GPUserLabel newLable =null;
if (actor != null)
{
Point2d pos = new Point2d(actor.Pos().x, actor.Pos().y);
switch (iconType)
{
case GPUserIconType.AAGun:
newLable = GamePlay.gpMakeUserLabel(pos, player, "AAA", GamePlay.gpTimeofDay(), (int)GPUserIconType.AAGun);
break;
case GPUserIconType.Tank:
newLable = GamePlay.gpMakeUserLabel(pos, player, "Tanks", GamePlay.gpTimeofDay(), (int)GPUserIconType.Tank);
break;
case GPUserIconType.Plane:
newLable = GamePlay.gpMakeUserLabel(pos, player, "Planes", GamePlay.gpTimeofDay(), (int)GPUserIconType.Plane);
break;
case GPUserIconType.Factory:
newLable = GamePlay.gpMakeUserLabel(pos, player, "Factory", GamePlay.gpTimeofDay(), (int)GPUserIconType.Factory);
break;
case GPUserIconType.Car:
newLable = GamePlay.gpMakeUserLabel(pos, player, "Car", GamePlay.gpTimeofDay(), (int)GPUserIconType.Car);
break;
case GPUserIconType.Label:
newLable = GamePlay.gpMakeUserLabel(pos, player, "Label", GamePlay.gpTimeofDay(), (int)GPUserIconType.Label);
break;
case GPUserIconType.Ship:
newLable = GamePlay.gpMakeUserLabel(pos, player, "Ship", GamePlay.gpTimeofDay(), (int)GPUserIconType.Ship);
break;
case GPUserIconType.Waypoint:
newLable = GamePlay.gpMakeUserLabel(pos, player, "Waypoint", GamePlay.gpTimeofDay(), (int)GPUserIconType.Waypoint);
break;
}
if (newLable != null)
{
if (ActiveRecons.Exists(item => item.ReconPlayer == player))
ActiveRecons.Find(item => item.ReconPlayer == player).Labels.Add(newLable);
else
ActiveRecons.Add(new Recon (player, newLable));
GamePlay.gpDrawUserLabel(player.Army(), newLable);
}
}
}
static string CreateTimeString(double num)
{
double hours = Math.Floor(num);
double minutes = (num - hours) * 60.0;
double seconds = (minutes - Math.Floor(minutes)) * 60.0;
int H = (int)Math.Floor(hours);
int M = (int)Math.Floor(minutes);
int S = (int)Math.Floor(seconds);
return H.ToString("00") + ":" + M.ToString("00") + ":" + S.ToString("00");
}
public override void OnUserCreateUserLabel(GPUserLabel ul)
{
base.OnUserCreateUserLabel(ul);
GamePlay.gpLogServer(null, "OnUserCreateUserLabel: {0} created {1} Mark at {2} ", new object[] { ul.Player.Name(), ul.Text, CreateTimeString(ul.time) });
}
}
|