private void InsertObstacleIntoBlueprint(LevelBlueprint bp) { var abspower = Obstacle_Width * BlackHoleBlueprint.DEFAULT_POWER_FACTOR * Obstacle_PowerFactor; switch (Obstacle_ObstacleType) { case ObstacleStub.ObstacleStubType.BlackHole: bp.BlueprintBlackHoles.Add(new BlackHoleBlueprint(Obstacle_Center.X, Obstacle_Center.Y, Obstacle_Width, -abspower)); break; case ObstacleStub.ObstacleStubType.WhiteHole: bp.BlueprintBlackHoles.Add(new BlackHoleBlueprint(Obstacle_Center.X, Obstacle_Center.Y, Obstacle_Width, +abspower)); break; case ObstacleStub.ObstacleStubType.GlassBlock: bp.BlueprintGlassBlocks.Add(new GlassBlockBlueprint(Obstacle_Center.X, Obstacle_Center.Y, Obstacle_Width, Obstacle_Height, Obstacle_Rotation * FloatMath.RadToDeg)); break; case ObstacleStub.ObstacleStubType.MirrorBlock: bp.BlueprintMirrorBlocks.Add(new MirrorBlockBlueprint(Obstacle_Center.X, Obstacle_Center.Y, Obstacle_Width, Obstacle_Height, Obstacle_Rotation * FloatMath.RadToDeg)); break; case ObstacleStub.ObstacleStubType.MirrorCircle: bp.BlueprintMirrorCircles.Add(new MirrorCircleBlueprint(Obstacle_Center.X, Obstacle_Center.Y, Obstacle_Width)); break; case ObstacleStub.ObstacleStubType.VoidVircle: bp.BlueprintVoidCircles.Add(new VoidCircleBlueprint(Obstacle_Center.X, Obstacle_Center.Y, Obstacle_Width)); break; default: SAMLog.Error("ABTA::IOIB", "Obstacle_ObstacleType: " + Obstacle_ObstacleType); return; } }
public void InsertIntoBlueprint(LevelBlueprint bp, ref byte cid) { switch (StubType) { case SCCMStubType.Cannon: InsertCannonIntoBlueprint(bp, ref cid); return; case SCCMStubType.Obstacle: InsertObstacleIntoBlueprint(bp); return; case SCCMStubType.Portal: InsertPortalIntoBlueprint(bp); return; case SCCMStubType.Wall: InsertWallIntoBlueprint(bp); return; default: SAMLog.Error("ABTA::IIBP", "StubType: " + StubType); return; } }
private void InsertWallIntoBlueprint(LevelBlueprint bp) { var center = FPoint.MiddlePoint(Wall_Point1, Wall_Point2); var length = (Wall_Point2 - Wall_Point1).Length(); var degrot = (Wall_Point2 - Wall_Point1).ToDegAngle(); switch (Wall_WallType) { case WallStub.WallStubType.Void: bp.BlueprintVoidWalls.Add(new VoidWallBlueprint(center.X, center.Y, length, degrot)); break; case WallStub.WallStubType.Glass: bp.BlueprintGlassBlocks.Add(new GlassBlockBlueprint(center.X, center.Y, length, GlassBlockBlueprint.DEFAULT_WIDTH, degrot)); break; case WallStub.WallStubType.Mirror: bp.BlueprintMirrorBlocks.Add(new MirrorBlockBlueprint(center.X, center.Y, length, GlassBlockBlueprint.DEFAULT_WIDTH, degrot)); break; default: SAMLog.Error("ABTA::IWIBP", "Wall_WallType: " + Wall_WallType); return; } }
public string GenerateASCIIMap(LevelBlueprint l) { var d = new LevelAsciiDrawer(l); d.Calc(); return(d.Get()); }
public static List <Tuple <string, LevelBlueprint, string> > ListUserLevelsFinished() { var allfiles = FileHelper.Inst.ListData(); var result = new List <Tuple <string, LevelBlueprint, string> >(); foreach (var file in allfiles) { if (!file.StartsWith("UPLOADEDLEVELDATA_")) { continue; } byte[] content = null; try { var dat = new LevelBlueprint(); content = FileHelper.Inst.ReadBinDataOrNull(file); dat.BinaryDeserialize(new BinaryReader(new MemoryStream(content))); var hash = ByteUtils.ByteToHexBitFiddle(MainGame.Inst.Bridge.DoSHA256(content)); result.Add(Tuple.Create(file, dat, hash)); } catch (Exception e) { SAMLog.Error("SCCMU::READFAIL_LULF", "Could not read CustomLevelData", $"Exception: {e}\n\n\nFile: {file}\n\n\nContent:{ByteUtils.ByteToHexBitFiddle(content)}"); } } return(result); }
private static void DrawMinigunCannons(LevelBlueprint level, Graphics g) { foreach (var c in level.BlueprintMinigun) { var rectBaseCircle = new RectangleF(-0.500f, -0.500f, 1.000f, 1.000f); var rectOuterCircle = new RectangleF(-0.833f, -0.833f, 1.666f, 1.666f); var rectMidArea = new RectangleF(-0.666f, -0.666f, 1.333f, 1.333f); var rectBarrel = new RectangleF(+0.166f, -0.166f, 0.666f, 0.333f); var save = g.Save(); { g.TranslateTransform(c.X, c.Y); g.ScaleTransform(c.Diameter, c.Diameter); // Mid Area Alpha g.FillRectangle(new SolidBrush(Color.FromArgb(64, CANNON_COLORS[c.Player])), rectMidArea); // Barrel g.RotateTransform(c.Rotation); g.FillRectangle(new SolidBrush(CANNON_COLORS[c.Player]), rectBarrel); g.DrawLine(new Pen(Color.Black, 0.008f), rectBarrel.Right - 1 * 0.05f, rectBarrel.Top, rectBarrel.Right - 1 * 0.05f, rectBarrel.Bottom); g.DrawLine(new Pen(Color.Black, 0.008f), rectBarrel.Right - 2 * 0.05f, rectBarrel.Top, rectBarrel.Right - 2 * 0.05f, rectBarrel.Bottom); g.DrawLine(new Pen(Color.Black, 0.008f), rectBarrel.Right - 3 * 0.05f, rectBarrel.Top, rectBarrel.Right - 3 * 0.05f, rectBarrel.Bottom); g.DrawLine(new Pen(Color.Black, 0.008f), rectBarrel.Right - 4 * 0.05f, rectBarrel.Top, rectBarrel.Right - 4 * 0.05f, rectBarrel.Bottom); // Base g.FillEllipse(new SolidBrush(CANNON_COLORS[c.Player]), rectBaseCircle); g.DrawEllipse(new Pen(Color.Black, 0.008f), rectBaseCircle); // Radius g.DrawEllipse(new Pen(CANNON_COLORS[c.Player], 0.032f), rectOuterCircle); } g.Restore(save); } }
private void ChangeID2(int delta) { if (_server.Mode != SAMNetworkConnection.ServerMode.CreatingNewGame) { return; } var data = _currentWorld.LevelNodes.Select(n => Levels.LEVELS[n.LevelID]).OrderBy(n => n.Name.Split('-').Last().PadLeft(3, '0')).ToList(); var idx = data.IndexOf(_currentLevel); idx = (idx + data.Count + delta) % data.Count; if (_server.ConnType == MultiplayerConnectionType.P2P) { for (int i = 0; i < 128; i++) { if (BlueprintAnalyzer.PlayerCount(data[idx]) != 2) { idx++; continue; } break; } } _currentLevel = data[idx]; UpdateLabels(); }
private static void DrawBlackHoles(LevelBlueprint level, Graphics g) { var penBH1 = new Pen(Color.White, 2); var brushBH1 = Brushes.Black; var penBH2 = new Pen(Color.Black, 2); var brushBH2 = Brushes.White; foreach (var vhole in level.BlueprintBlackHoles) { var save = g.Save(); { g.TranslateTransform(vhole.X, vhole.Y); if (vhole.Power < 0) { g.FillEllipse(brushBH1, new RectangleF(-vhole.Diameter / 2f, -vhole.Diameter / 2f, vhole.Diameter, vhole.Diameter)); for (int i = 1; i <= 6; i++) { var sz = i / 6f; g.DrawEllipse(penBH1, new RectangleF(sz * -vhole.Diameter / 2f, sz * -vhole.Diameter / 2f, sz * vhole.Diameter, sz * vhole.Diameter)); } } else { g.FillEllipse(brushBH2, new RectangleF(-vhole.Diameter / 2f, -vhole.Diameter / 2f, vhole.Diameter, vhole.Diameter)); for (int i = 1; i <= 6; i++) { var sz = i / 6f; g.DrawEllipse(penBH2, new RectangleF(sz * -vhole.Diameter / 2f, sz * -vhole.Diameter / 2f, sz * vhole.Diameter, sz * vhole.Diameter)); } } } g.Restore(save); } }
private BulletPathBlueprint[] Precalc(LevelBlueprint lvl, ICannonBlueprint cannon) { var worldNormal = CreateRayWorld(lvl); var rayClock = new List <Tuple <BulletPathBlueprint, float> > [RESOLUTION]; for (int ideg = 0; ideg < RESOLUTION; ideg++) { float deg = ideg * (360f / RESOLUTION); var rays = FindBulletPaths(lvl, worldNormal, cannon, deg); rayClock[ideg] = rays; } RemoveUntrusted(rayClock); List <BulletPathBlueprint> resultRays = new List <BulletPathBlueprint>(); for (;;) { for (int ideg = 0; ideg < RESOLUTION; ideg++) { if (rayClock[ideg].Any()) { resultRays.Add(ExtractBestRay(rayClock, ideg, rayClock[ideg].First().Item1.TargetCannonID)); } } break; } return(resultRays.ToArray()); }
private void RecreateMapForLevelFile(LevelBlueprint lp) { var rex = new Regex(@"^#<map>.*^#</map>", RegexOptions.Multiline | RegexOptions.Singleline); var newCode = rex.Replace(Code, GenerateASCIIMap(lp)); int selS = SelectionStart; int selL = SelectionLength; int coff = CaretOffset?.Get() ?? -1; if (newCode != Code) { int tc = TimerCountDown; Code = newCode; TimerCountDown = tc; SelectionStart = selS; SelectionLength = selL; if (coff >= 0) { CaretOffset?.Set(coff); } Console.WriteLine("Regenerate map"); } }
public BulletPathBlueprint[] PrecalcLaser(LevelBlueprint lvl, ICannonBlueprint cannon) { var worldNormal = CreateRayWorld(lvl, 0, 1); var worldExtend = CreateRayWorld(lvl, HITBOX_ENLARGE, 1.5f); var rayClock = new List <Tuple <BulletPathBlueprint, float> > [RESOLUTION]; for (int ideg = 0; ideg < RESOLUTION; ideg++) { float deg = ideg * (360f / RESOLUTION); var rays = FindLaserPaths(lvl, worldNormal, worldExtend, cannon, deg); rayClock[ideg] = rays; } List <BulletPathBlueprint> resultRays = new List <BulletPathBlueprint>(); for (;;) { for (int ideg = 0; ideg < RESOLUTION; ideg++) { if (rayClock[ideg].Any()) { resultRays.Add(ExtractBestRay(rayClock, ideg, rayClock[ideg].First().Item1.TargetCannonID)); } } break; } return(resultRays.ToArray()); }
protected override void ApplicationStarted() { defaultPool = PoolManager.GetPool(); var levelBlueprint = new LevelBlueprint(); var levelEntity = defaultPool.CreateEntity(levelBlueprint); var player = defaultPool.CreateEntity(new PlayerBlueprint(_gameConfiguration.StartingFoodPoints)); var playerView = player.GetComponent <ViewComponent>(); var playerComponent = player.GetComponent <PlayerComponent>(); var levelComponent = levelEntity.GetComponent <LevelComponent>(); levelComponent.Level.DistinctUntilChanged() .Subscribe(x => { playerView.View.transform.position = Vector3.zero; SetupLevel(levelComponent); }); _eventSystem.Receive <PlayerKilledEvent>() .Delay(TimeSpan.FromSeconds(_gameConfiguration.IntroLength)) .Subscribe(x => { levelBlueprint.UpdateLevel(levelComponent, 1); playerComponent.Food.Value = _gameConfiguration.StartingFoodPoints; SetupLevel(levelComponent); }); }
public LevelBlueprint ReturnRandomBlueprint() { int rand = Random.Range(0, levelBlueprints.Count); currentLevelBlueprint = levelBlueprints[rand]; return(levelBlueprints[rand]); }
private void OpenBinLevel() { try { var ofd = new OpenFileDialog(); ofd.Filter = "Userlevel (*.bin)|*"; ofd.Title = "Open Userlevel"; if (ofd.ShowDialog() != true) { return; } var filename = ofd.FileName; var bp = new LevelBlueprint(); using (var ms = new MemoryStream(File.ReadAllBytes(filename))) { using (var br = new BinaryReader(ms)) { bp.BinaryDeserialize(br); } } var bmp = CreateOverviewUnsafe(bp); PreviewImage = ImageHelper.CreateImageSource(bmp).Item1; _currentDisplayLevel = null; return; } catch (Exception e) { MessageBox.Show("OpenXNB:\r\n" + e); } }
public LaserRenderer(GDGameScreen scrn, LaserNetwork nw, LevelBlueprint bp) : base(scrn, GDConstants.ORDER_GAME_LASER) { _network = nw; Position = new FPoint(bp.LevelWidth / 2f, bp.LevelHeight / 2f); DrawingBoundingBox = new FSize(bp.LevelWidth, bp.LevelHeight); }
public void AcceptNewBlueprint() { int rand = Random.Range(0, levelBlueprints.Count); currentLevelBlueprint = levelBlueprints[rand]; currentLevelBlueprint.gameObject.SetActive(true); }
public void ActivateBlueprint() { int rand = Random.Range(0, levelBlueprints.Count); currentLevelBlueprint = levelBlueprints[rand]; Instantiate(currentLevelBlueprint.ground); }
public Bitmap DrawOverview(LevelBlueprint level) { Bitmap img; try { img = Draw(level, -1); } catch (Exception) { img = Draw(null, -1); } Bitmap r = new Bitmap(img.Width + 16, img.Height + 48 + 48 + 16); using (Graphics g = Graphics.FromImage(r)) { g.Clear(Color.White); g.DrawImageUnscaled(img, 0, 16 + 48); g.DrawString(level.Name + ": " + level.FullName, new Font("Calibri", 28, FontStyle.Bold), Brushes.DarkRed, 24, 16 + 8); g.DrawString("{" + $"{ByteMath.SplitGuid(level.UniqueID).Item5:X12}" + "}", new Font("Courier New", 28, FontStyle.Bold), Brushes.DarkRed, 24, 16 + 8 + img.Height + 48); var kitRect = new RectangleF(img.Width - 16, 48, 32, 32); g.FillEllipse(COLORS_KITYPE[level.KIType - 10], kitRect); g.DrawString((level.KIType - 10).ToString(), new Font("Courier New", 24, FontStyle.Bold), Brushes.Black, kitRect, new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center }); } return(r); }
public static LevelBlueprint WithBorderWalls(this LevelBlueprint levelBlueprint, bool withBorderWalls = true) { if (withBorderWalls) { levelBlueprint.GenerateBorderWalls(); } return(levelBlueprint); }
public void SetWorldMapScreenZoomedOut(GraphBlueprint g, LevelBlueprint initFocus = null) { var screen = new GDWorldMapScreen(this, Graphics, g, initFocus?.UniqueID); SetCurrentScreen(screen); // screen.ZoomInstantOut(); screen.ZoomOut(); }
public GDGameScreen_SCCMTest(MainGame game, GraphicsDeviceManager gdm, LevelBlueprint bp, FractionDifficulty diff, SCCMLevelData dat, GameSpeedModes speed) : base(game, gdm, bp, diff, false, false, false) { SCCMData = dat; GameSpeedMode = _lastSpeed = speed; UpdateGameSpeed(); }
public GDGameScreen_SP(MainGame game, GraphicsDeviceManager gdm, LevelBlueprint bp, FractionDifficulty diff, GraphBlueprint ws) : base(game, gdm, bp, diff, false, false, diff == FractionDifficulty.DIFF_0 && bp.UniqueID == Levels.LEVELID_1_1) { WorldBlueprint = ws; GameSpeedMode = MainGame.Inst.Profile.SingleplayerGameSpeed; UpdateGameSpeed(); }
private static bool CheckBoardGeneration(IList <Item> items, LevelBlueprint config) { return // Search if match3 line exist (!SearchItemInChaine(items, 3, Axis.X, Axis.X, Axis.Y).SelectMany(ls => ls.Slinq()) .Concat(SearchItemInChaine(items, 2, Axis.Y, Axis.Y, Axis.X).SelectMany(ls => ls.Slinq())) .Select(InitItem, config) .Aggregate(false, (b, item) => true) && // Search if steps avaliable !SearchItemInChaine(items, 2, Axis.X, Axis.X, Axis.Y) .Where((ls, _items) => IsStepAllowed(_items, ls[0].sprite, ls[0].position + Vector2.down, Vector2.right, Vector2.down, Vector2.left) || IsStepAllowed(_items, ls[ls.Count - 1].sprite, ls[ls.Count - 1].position + Vector2.up, Vector2.left, Vector2.up, Vector2.right), items) .SelectMany(ls => ls.Slinq()) .Concat(SearchItemInChaine(items, 2, Axis.Y, Axis.Y, Axis.X) .Where((ls, _items) => IsStepAllowed(_items, ls[0].sprite, ls[0].position + Vector2.left, Vector2.left, Vector2.up, Vector2.down) || IsStepAllowed(_items, ls[ls.Count - 1].sprite, ls[ls.Count - 1].position + Vector2.right, Vector2.right, Vector2.up, Vector2.down), items) .SelectMany(ls => ls.Slinq())) .Concat(items .Slinq() .OrderBy((i1, i2) => OrderBy(i1, i2, Axis.Y, Axis.X)) .Where( (i, t) => IsAllowSpetMiddlePattern(t.Item1, i, t.Item2, Axis.Y, Vector2.up, Vector2.down), Tuple.Create(items, new List <Item>()))) .Concat(items.Slinq().OrderBy((i1, i2) => OrderBy(i1, i2, Axis.X, Axis.Y)) .Where( (i, t) => IsAllowSpetMiddlePattern(t.Item1, i, t.Item2, Axis.X, Vector2.left, Vector2.right), Tuple.Create(items, new List <Item>()))) .Any() .ToSome() .Where(v => !v) .ForEach((v, _items) => _items .SlinqWithIndex() .Where(t => t.Item2 % 3 == 0) .Select(t => t.Item1) .ForEach((i, c) => InitItem(i, c), config) , items) .ValueOr(false)); }
public GDGameScreen_SCCMUpload(MainGame game, GraphicsDeviceManager gdm, LevelBlueprint bp, SCCMLevelData dat, GameSpeedModes speed, bool toast) : base(game, gdm, bp, FractionDifficulty.DIFF_3, false, false, false) { SCCMData = dat; _toast = toast; GameSpeedMode = _lastSpeed = speed; UpdateGameSpeed(); }
public override void ShowScorePanel(LevelBlueprint lvl, PlayerProfile profile, HashSet <FractionDifficulty> newDifficulties, bool playerHasWon, int addPoints, int time) { ((GDGameHUD)HUD).BtnPause.IsEnabled = false; ((GDGameHUD)HUD).BtnSpeed.IsEnabled = false; GameSpeedMode = GameSpeedModes.NORMAL; HUD.AddModal(new HUDSCCMTestScorePanel(lvl, SCCMData, Difficulty, _lastSpeed, time), false); }
public override void ShowScorePanel(LevelBlueprint lvl, PlayerProfile profile, HashSet <FractionDifficulty> newDifficulties, bool playerHasWon, int addPoints) { ((GDGameHUD)HUD).BtnPause.IsEnabled = false; ((GDGameHUD)HUD).BtnSpeed.IsEnabled = false; GameSpeedMode = GameSpeedModes.NORMAL; HUD.AddModal(new HUDTutorialScorePanel(profile, addPoints), false); }
public HUDSCCMScorePanel_Lost(LevelBlueprint lvl, FractionDifficulty d) { _level = lvl; SelectedDifficulty = d; RelativePosition = FPoint.Zero; Size = new FSize(WIDTH, HEIGHT); Alignment = HUDAlignment.CENTER; Background = FlatColors.BackgroundHUD; }
public GDCellularBackground(GDGameScreen scrn, LevelBlueprint lvl) : base(scrn) { tileCountX = FloatMath.Ceiling(lvl.LevelWidth / 64f) + 2 * MAX_EXTENSION_X; tileCountY = FloatMath.Ceiling(lvl.LevelHeight / 64f) + 2 * MAX_EXTENSION_Y; wrapMode = scrn.WrapMode; _grid = new GridCellMembership[tileCountX, tileCountY]; Initialize(); }
public LevelAsciiDrawer(LevelBlueprint f) { level = f; MAPWIDTH_I = (int)(f.LevelWidth / 64); MAPHEIGHT_I = (int)(f.LevelHeight / 64); MAPWIDTH = MAPWIDTH_I * 2 + 1; MAPHEIGHT = MAPHEIGHT_I * 2 + 1; }
private void ChangeID1(int delta) { int i1 = Levels.WORLDS_MULTIPLAYER.ToList().IndexOf(_currentWorld); i1 = (i1 + delta + Levels.WORLDS_MULTIPLAYER.Length) % Levels.WORLDS_MULTIPLAYER.Length; _currentWorld = Levels.WORLDS_MULTIPLAYER[i1]; _currentLevel = Levels.LEVELS[_currentWorld.LevelNodes.First().LevelID]; UpdateLabels(); }