Esempio n. 1
0
    public static List <MapPoint> LoadPoints(System.IO.Stream fs)
    {
        var pts  = new List <MapPoint>();
        var data = new byte[4];

        fs.Read(data, 0, 4);
        int count = System.BitConverter.ToInt32(data, 0);

        if (count > 0)
        {
            int       LENGTH = 17;
            GlobalMap gmap   = GameMaster.realMaster.globalMap;
            for (int i = 0; i < count; i++)
            {
                data = new byte[LENGTH];
                fs.Read(data, 0, LENGTH);
                int   ID        = System.BitConverter.ToInt32(data, 0);
                var   mmtype    = (MapPointType)data[4];
                float angle     = System.BitConverter.ToSingle(data, 5);
                float height    = System.BitConverter.ToSingle(data, 9);
                float stability = System.BitConverter.ToSingle(data, 13);

                switch (mmtype)
                {
                case MapPointType.QuestMark:     // awaiting
                    break;

                case MapPointType.Station:
                case MapPointType.Wreck:
                case MapPointType.Island:
                case MapPointType.SOS:
                case MapPointType.Portal:
                case MapPointType.Colony:
                case MapPointType.Wiseman:
                case MapPointType.Wonder:
                case MapPointType.Resources:
                {
                    var poi = new PointOfInterest(ID);
                    // base loading
                    poi.angle     = angle;
                    poi.height    = height;
                    poi.ringIndex = gmap.DefineRing(height);
                    poi.type      = mmtype;
                    poi.stability = stability;
                    //
                    poi.Load(fs);
                    //
                    pts.Add(poi);
                    break;
                }

                case MapPointType.Star:
                {
                    var sp = new SunPoint(ID);
                    // base loading
                    sp.angle     = angle;
                    sp.height    = height;
                    sp.ringIndex = gmap.DefineRing(height);
                    sp.type      = mmtype;
                    sp.stability = stability;
                    //
                    sp.LoadSunPointData(fs);
                    //
                    pts.Add(sp);
                    break;
                }

                case MapPointType.MyCity:
                case MapPointType.Unknown:
                default:
                {
                    var mpoint = new MapPoint(ID);
                    // base loading
                    mpoint.angle     = angle;
                    mpoint.height    = height;
                    mpoint.ringIndex = gmap.DefineRing(height);
                    mpoint.type      = mmtype;
                    mpoint.stability = stability;
                    //
                    pts.Add(mpoint);
                    break;
                }
                }
            }
        }
        data = new byte[4];
        fs.Read(data, 0, 4);
        nextID = System.BitConverter.ToInt32(data, 0);
        return(pts);
    }