private void AddSwitchedSection(Map <Template, Room> map, Template current, Skid switches) { int state = switches.Next(); var r = current.ReplaceWith(map.CreateTemplate(TemplateType.RoomChooser)); foreach (var hall in r.Exit) { hall.Lock = new Switch(state); // seal the normal exits } r.ConnectTo(map.CreateTemplate(TemplateType.SwitchSeq, state)); if (Roll() > 10) { // Add switch-lock var sl = map.CreateTemplate(TemplateType.SwitchLockSeq, state); var gb = map.CreateTemplate(TemplateType.BonusGoal); r.ConnectTo(sl); sl.ConnectTo(gb); } }
private void AddLockChain(Map <Template, Room> map, ref int tick, Template current, Skid keys) { if (Roll() <= 10) { // () - R - L - key // \-(k)- L - () var r = map.CreateTemplate(TemplateType.RoomChooser); var keyL = map.CreateTemplate(TemplateType.LayoutChooser); var lockedL = map.CreateTemplate(TemplateType.LayoutChooser); int key = keys.Next(); current.SwapLeft(r); r.ConnectTo(keyL); r.ConnectTo(lockedL).Lock = new Key(key); keyL.ConnectTo(map.CreateRoom(RoomType.Key, key)); current.SwapRight(lockedL); } else { tick++; // () - r - K - () // \ - K - GB var r = map.CreateTemplate(TemplateType.RoomChooser); var newK = map.CreateTemplate(TemplateType.LockChain); var gb = map.CreateTemplate(TemplateType.BonusGoal); current.SwapLeft(r); r.ConnectTo(current); r.ConnectTo(newK); newK.ConnectTo(gb); map.Track(current); // Reuse key sequence } }
public static void Init() { #region effects var rocketEngineCurve = new Curve(); rocketEngineCurve.AddPoint(new Vector2(1, 0.5f)); rocketEngineCurve.AddPoint(new Vector2(0.5f, 0.75f)); rocketEngineCurve.AddPoint(new Vector2(0, 0.1f)); var wheelSkidCurve = new Curve(); var rng = new RandomNumberGenerator(); for (var i = 0; i < 100; i++) { wheelSkidCurve.AddPoint(new Vector2(i / 100f, rng.RandiRange(900, 1100) / 1000f)); } var explorerSkid = new Skid { Length = 300, Width = 4, Opacity = 10, Curve = wheelSkidCurve, Color = new Color(0, 0, 0) }; var crimsonSkid = new Skid { Length = 15, Width = 5, Color = new Color(255 / 255f, 254 / 255f, 152 / 255f), Opacity = 75, Curve = rocketEngineCurve }; #endregion explorer = new UnitType("explorer.png") { Name = "Explorer", Description = "Starting bot.", MaxSpeed = 60f, Acceleration = 400f, Deceleration = 200f, AngularDeceleration = 0.075f, Mass = 250f, Inertia = 500f, RotationSpeed = 6f, Health = 100f, CollisionShape = new [] { new Vector2(26, 22), new Vector2(26, -25), new Vector2(-26, -25), new Vector2(-26, -21) }, ShadowBlur = 4, ShadowOffset = new Vector2(0, 0.2f), Body = "Body", SkidMarks = new System.Collections.Generic.Dictionary <Vector2, Skid> { { new Vector2(-4, 4), explorerSkid }, { new Vector2(4, 4), explorerSkid } } }; crimson = new UnitType("crimson.png") { Name = "Crimson", Description = "A big cruiser drone. Flies at high altitudes.", MaxSpeed = 90f, Acceleration = 170f, RotationSpeed = 5f, Mass = 1000f, Inertia = 5000f, Deceleration = 50f, AngularDeceleration = 0.1f, Health = 500f, CollisionShape = new [] { new Vector2(16, 17), new Vector2(8, -7), new Vector2(0, -15), new Vector2(-8, -7), new Vector2(-16, 17), new Vector2(0, 12) }, ShadowOffset = new Vector2(-12, 18), Body = "Air", SkidMarks = new System.Collections.Generic.Dictionary <Vector2, Skid> { { new Vector2(4.5f, 4.5f), crimsonSkid }, { new Vector2(-4.5f, 4.5f), crimsonSkid } } }; ghost = new UnitType("ghost.png") { Name = "Ghost", Description = "A special unit used for editing & spectating.", MaxSpeed = 200f, Acceleration = 1000f, Rotates = false, Mass = 1f, Inertia = 0f, Deceleration = 1000f, Health = float.MaxValue - float.MaxValue / 2, CollisionShape = new [] { new Vector2(0, 0), new Vector2(0, 0), }, ShadowBlur = -1, Body = "Air" }; }