View Single Post
  #3  
Old 10-25-2012, 01:16 PM
FG28_Kodiak FG28_Kodiak is offline
Approved Member
 
Join Date: Dec 2009
Location: Swabia->Bavaria->Germany
Posts: 884
Default

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) });

    }
}

Last edited by FG28_Kodiak; 10-26-2012 at 11:02 AM.
Reply With Quote