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