Esempio n. 1
0
    private RingSector CreateNewSector(int i)
    {
        var availableTypes = MapPoint.GetAvailablePointsType(ascension);

        var        pos   = GetSectorPosition(i);
        int        x     = Random.Range(0, availableTypes.Count);
        var        inpos = GetSectorPosition(i);
        byte       ring  = DefineRing(pos.y);
        RingSector rs;

        if (availableTypes[x] != MapMarkerType.Star)
        {
            MapPoint centralPoint = MapPoint.CreatePointOfType(
                pos.x,
                pos.y,
                availableTypes[x]
                );
            rs = new RingSector(centralPoint, Environment.GetEnvironment(ascension, pos.y));
            AddPoint(centralPoint, true);
        }
        else
        {
            var      e        = Environment.GetEnvironment(ascension, pos.y);
            SunPoint sunpoint = new SunPoint(
                pos.x,
                pos.y,
                e.horizonColor
                );
            rs = new RingSector(sunpoint, e);
            AddPoint(sunpoint, true);
        }
        mapSectors[i] = rs;
        actionsHash++;
        return(rs);
    }
    public void Prepare()
    {
        transform.position = Vector3.up * 0.1f;

        rotationSpeed    = new float[RINGS_COUNT];
        rotationSpeed[0] = (Random.value - 0.5f) * MAX_RINGS_ROTATION_SPEED;
        rotationSpeed[1] = (Random.value - 0.5f) * MAX_RINGS_ROTATION_SPEED;
        rotationSpeed[2] = (Random.value - 0.5f) * MAX_RINGS_ROTATION_SPEED;
        rotationSpeed[3] = (Random.value - 0.5f) * MAX_RINGS_ROTATION_SPEED;
        rotationSpeed[4] = (Random.value - 0.5f) * MAX_RINGS_ROTATION_SPEED;
        ringsRotation    = new float[RINGS_COUNT];

        mapPoints = new List <MapPoint>();
        int sectorsCount = 0;

        for (int i = 0; i < RINGS_COUNT; i++)
        {
            sectorsCount += (int)(360f / sectorsDegrees[i]);
        }
        mapSectors      = new RingSector[sectorsCount];
        ascension       = GameConstants.ASCENSION_STARTVALUE;
        ascensionTarget = ascension;
        //start sector:
        byte ring = RINGS_COUNT / 2;

        sectorsCount = (int)(360f / sectorsDegrees[ring]);
        int min = 0;

        for (int i = 0; i < ring; i++)
        {
            min += (int)(360f / sectorsDegrees[i]);
        }
        int startSectorIndex = Random.Range(min, min + sectorsCount);

        Vector2    startPos    = GetSectorPosition(startSectorIndex);
        var        sunPoint    = new SunPoint(startPos.x, startPos.y, Color.white);
        RingSector startSector = new RingSector(sunPoint, Environment.defaultEnvironment);

        startSector.SetFertility(false);
        mapSectors[startSectorIndex] = startSector;
        Vector2 dir = Quaternion.AngleAxis(Random.value * 360, Vector3.forward) * Vector2.up;
        float   xpos = startPos.x + dir.x * 0.25f * sectorsDegrees[ring], ypos = startPos.y + dir.y * 0.25f * (ringsBorders[ring] - ringsBorders[ring + 1]);

        cityPoint = MapPoint.CreatePointOfType(
            xpos, //angle
            ypos,
            MapPointType.MyCity
            );
        mapPoints.Add(cityPoint); // CITY_POINT_INDEX = 0
        mapPoints.Add(sunPoint);
        //
        starsTypesArray = new BitArray((int)Environment.EnvironmentPreset.TotalCount, false);
        starsTypesArray[(int)Environment.EnvironmentPreset.Default] = true;
        createNewStars = true;
        //
        actionsHash = 0;
        prepared    = true;
        //зависимость : Load()
    }
    private RingSector CreateNewSector(int i)
    {
        MapPointType type; Path p;

        ProgressionMaster.DefinePointOfInterest(this, out type, out p);
        var        pos = GetSectorPosition(i);
        RingSector rs;

        if (type != MapPointType.Star)
        {
            var poi = new PointOfInterest(pos.x, pos.y, type, p);
            rs = new RingSector(poi, Environment.GetEnvironment(ascension, pos.y));
            AddPoint(poi, true);
        }
        else
        {
            var e           = Environment.GetEnvironment(ascension, pos.y);
            int presetIndex = (int)e.presetType;
            if (starsTypesArray[presetIndex])
            {
                return(null);
            }
            else
            {
                SunPoint sunpoint = new SunPoint(
                    pos.x,
                    pos.y,
                    e.GetMapColor()
                    );
                rs = new RingSector(sunpoint, e);
                AddPoint(sunpoint, true);
                starsTypesArray[presetIndex] = true;
                createNewStars = false;
                for (int j = 0; j < (int)Environment.EnvironmentPreset.TotalCount; j++)
                {
                    if ((Environment.EnvironmentPreset)j == Environment.EnvironmentPreset.Custom)
                    {
                        continue;
                    }
                    else
                    {
                        if (starsTypesArray[j] == false)
                        {
                            createNewStars = true;
                            break;
                        }
                    }
                }
            }
        }
        mapSectors[i] = rs;
        actionsHash++;
        return(rs);
    }
Esempio n. 4
0
 public RingSector(SunPoint sun_point, Environment.EnvironmentPreset environmentPresetType)
 {
     ID = lastFreeID;
     lastFreeID++;
     centralPoint = sun_point;
     centralPoint.SetStability(1f);
     environment = Environment.GetEnvironment(environmentPresetType);
     sun_point.SetStability(1f);
     innerPointsIDs = new Dictionary <byte, int>();
     destroyed      = false;
 }
Esempio n. 5
0
    private void AddVisibleStar(SunPoint sp)
    {
        var g = new GameObject("star");

        g.layer = GameConstants.CELESTIAL_LAYER;
        var sr = g.AddComponent <SpriteRenderer>();

        sr.sprite         = PoolMaster.GetStarSprite(false);
        sr.sharedMaterial = PoolMaster.celestialBillboardMaterial;
        sr.color          = sp.color;
        celestialBodies.Add(sp, g.transform);
        if (!showCelestialBodies)
        {
            g.SetActive(false);
        }
        Vector3 cpoint = Quaternion.AngleAxis(gmap.cityPoint.angle, Vector3.back) * (Vector3.up * gmap.cityPoint.height),
                mpoint = Quaternion.AngleAxis(sp.angle, Vector3.back) * (Vector3.up * sp.height);

        mpoint              -= cpoint;
        mpoint.z             = mpoint.y;
        mpoint.y             = 0.2f;
        g.transform.position = mpoint * SKY_SPHERE_RADIUS;
    }
Esempio n. 6
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);
    }