private void SaveWireInput(WireDirection wireDirection, int length) { for (int i = 0; i < length; i++) { switch (wireDirection) { case WireDirection.Up: currentY++; break; case WireDirection.Down: currentY--; break; case WireDirection.Left: currentX--; break; case WireDirection.Right: currentX++; break; default: throw new NotSupportedException($"{nameof(WireDirection)} value of {wireDirection} is not supported."); } AddWireCell(currentX, currentY); } }
public override void LoadAll(IO.ComponentData Compound) { base.LoadAll(Compound); if (ID == 45) { } j1 = Compound.GetInt("J1"); j2 = Compound.GetInt("J2"); Resistance = Compound.GetDouble("Resistance"); IsConnected = Compound.GetBool("IsConnected"); direction = (WireDirection)Compound.GetInt("Direction"); if (Compound.Contains("SendingVoltage")) { sendingVoltage = Compound.GetDouble("SendingVoltage"); sendingCurrent = Compound.GetDouble("SendingCurrent"); CanSendVoltageOrCurrent = Compound.GetBool("CanSendVoltage"); } dp = Compound.GetString("DrawPath"); }
public Wire(Vector2 gridPosition, WireDirection wireDirection) { GridPosition = gridPosition; WireDirection = wireDirection; }
private int[] FollowWire(int xPosition, int yPosition, WireDirection direction) { var endOfWire = false; while (!endOfWire) { switch (runBoard.Screen[xPosition, yPosition]) { case '─': if (direction == WireDirection.right) { yPosition++; } else { yPosition--; } break; case '│': if (direction == WireDirection.down) { xPosition++; } else { xPosition--; } break; case '┐': if (direction == WireDirection.up) { yPosition--; } else { xPosition++; } break; case '┘': if (direction == WireDirection.down) { yPosition--; } else { xPosition--; } break; case '┌': if (direction == WireDirection.up) { yPosition++; } else { xPosition++; } break; case '└': if (direction == WireDirection.down) { yPosition++; } else { xPosition--; } break; case '>': endOfWire = true; break; default: endOfWire = true; break; } } return(new int[2] { xPosition, yPosition }); }
public static Level LoadLevel(string path) { XmlDocument document = new XmlDocument(); document.Load(path); XmlElement levelEl = document.DocumentElement; string levelName = levelEl.GetAttribute("name"); List <ApplianceInfo> staticAppliancesInfos = new List <ApplianceInfo>(); List <ApplianceInfo> movableAppliancesInfos = new List <ApplianceInfo>(); List <Wire> wires = new List <Wire>(); XmlElement appliances = levelEl["appliances"]; XmlElement appliancesStaticEl = appliances["static"]; foreach (XmlElement applianceEl in appliancesStaticEl.ChildNodes) { ApplianceType applianceType; if (!Enum.TryParse(applianceEl.Name, out applianceType)) { throw new ArgumentException("Invalid AppliactionType enum name"); } string[] gridPositionStr = applianceEl.GetAttribute("gridPosition").Split(','); Vector2 gridPosition = new Vector2(int.Parse(gridPositionStr[0]), int.Parse(gridPositionStr[1])); List <Modifier> modifiers = new List <Modifier>(); if (applianceEl.ChildNodes.Count == 1) { if (applianceEl.ChildNodes[0].Name.Equals("modifiers")) { XmlNode modifiersEl = applianceEl.ChildNodes[0]; foreach (XmlElement modifierEl in modifiersEl.ChildNodes) { Modifier modifier = Modifier.GetByName(modifierEl.Name); if (modifier == null) { throw new ArgumentException("Modifier not found: " + modifierEl.Name); } modifiers.Add(modifier); } } else { throw new ArgumentException("Expecting to find \"modifiers\" element. Found instead: " + applianceEl.ChildNodes[0].Name); } } ApplianceData applianceData = new ApplianceData(); XmlElement applianceDataEl = applianceEl["data"]; foreach (XmlElement data in applianceDataEl.ChildNodes) { applianceData.AddData(data.Name, data.InnerText); } staticAppliancesInfos.Add(new ApplianceInfo(applianceType, gridPosition, modifiers, applianceData)); } XmlElement appliancesMovableEl = appliances["movable"]; foreach (XmlElement applianceEl in appliancesMovableEl.ChildNodes) { ApplianceType applianceType; if (!Enum.TryParse(applianceEl.Name, out applianceType)) { throw new ArgumentException("Invalid AppliactionType enum name"); } string[] gridPositionStr = applianceEl.GetAttribute("gridPosition").Split(','); Vector2 gridPosition = new Vector2(int.Parse(gridPositionStr[0]), int.Parse(gridPositionStr[1])); List <Modifier> modifiers = new List <Modifier>(); if (applianceEl.ChildNodes.Count == 1) { if (applianceEl.ChildNodes[0].Name.Equals("modifiers")) { XmlNode modifiersEl = applianceEl.ChildNodes[0]; foreach (XmlElement modifierEl in modifiersEl.ChildNodes) { Modifier modifier = Modifier.GetByName(modifierEl.Name); if (modifier == null) { throw new ArgumentException("Modifier not found: " + modifierEl.Name); } modifiers.Add(modifier); } } else { throw new ArgumentException("Expecting to find \"modifiers\" element. Found instead: " + applianceEl.ChildNodes[0].Name); } } ApplianceData applianceData = new ApplianceData(); XmlElement applianceDataEl = applianceEl["data"]; foreach (XmlElement data in applianceDataEl.ChildNodes) { applianceData.AddData(data.Name, data.InnerText); } movableAppliancesInfos.Add(new ApplianceInfo(applianceType, gridPosition, modifiers, applianceData)); } XmlElement wiresEl = levelEl["wires"]; foreach (XmlElement wireEl in wiresEl.ChildNodes) { string[] gridPositionStr = wireEl.GetAttribute("gridPosition").Split(','); Vector2 gridPosition = new Vector2(int.Parse(gridPositionStr[0]), int.Parse(gridPositionStr[1])); WireDirection wireDirection = (WireDirection)int.Parse(wireEl.GetAttribute("direction")); wires.Add(new Wire(gridPosition, wireDirection)); } return(new Level(levelName, staticAppliancesInfos, movableAppliancesInfos, wires)); }
public MCWire(IMCObject obj, WireDirection dir) { this._base_object = obj; this.connected_wire = null; this.dir = dir; }
public void FindPath(Wire wire) { AtVector = Vector; if (wire.WireState != WireType.Wirei) { switch (ComeDirection) { case WireDirection.WireRight: #region Right { if (wire.WireData[3] != 0) { if (wire.WireData[1] == 0) { if (wire.WireData[0] != 0 && wire.WireData[2] != 0) { if (Vector.Y < GameConfig.HightY / 2f) { ComeDirection = WireDirection.WireDown; GoDirection = WireDirection.WireUp; } else { ComeDirection = WireDirection.WireUp; GoDirection = WireDirection.WireDown; } } else { if (wire.WireData[0] != 0) { ComeDirection = WireDirection.WireDown; GoDirection = WireDirection.WireUp; if (wire.Vector.Y == GameConfig.HightY - 1) { ComeDirection = WireDirection.WireRight; GoDirection = WireDirection.WireLeft; } } if (wire.WireData[2] != 0) { ComeDirection = WireDirection.WireUp; GoDirection = WireDirection.WireDown; if (wire.Vector.Y == 0) { ComeDirection = WireDirection.WireRight; GoDirection = WireDirection.WireLeft; } } } } else { ComeDirection = WireDirection.WireRight; GoDirection = WireDirection.WireLeft; } } else { ComeDirection = WireDirection.WireRight; GoDirection = WireDirection.WireLeft; } } #endregion break; case WireDirection.WireLeft: #region Left { if (wire.WireData[1] != 0) { if (wire.WireData[0] != 0 && wire.WireData[2] != 0) { if (Vector.Y > GameConfig.HightY / 2f) { ComeDirection = WireDirection.WireDown; GoDirection = WireDirection.WireUp; } else { ComeDirection = WireDirection.WireUp; GoDirection = WireDirection.WireDown; } } else { if (wire.WireData[0] != 0) { ComeDirection = WireDirection.WireDown; GoDirection = WireDirection.WireUp; } if (wire.WireData[2] != 0) { ComeDirection = WireDirection.WireUp; GoDirection = WireDirection.WireDown; } } //else //{ // ComeDirection = WireDirection.WireLeft; // GoDirection = WireDirection.WireRight; //} } else { ComeDirection = WireDirection.WireRight; GoDirection = WireDirection.WireLeft; } } #endregion break; case WireDirection.WireUp: #region Up { if (wire.WireData[1] != 0) { GoDirection = WireDirection.WireLeft; ComeDirection = WireDirection.WireRight; } else { if (wire.WireData[2] != 0) { GoDirection = WireDirection.WireDown; ComeDirection = WireDirection.WireUp; } else { if (wire.WireData[3] != 0) { GoDirection = WireDirection.WireRight; ComeDirection = WireDirection.WireLeft; } else { GoDirection = WireDirection.WireLeft; ComeDirection = WireDirection.WireRight; } } } } #endregion break; case WireDirection.WireDown: #region Down { if (wire.WireData[1] != 0) { ComeDirection = WireDirection.WireRight; GoDirection = WireDirection.WireLeft; } else { if (wire.WireData[0] != 0) { GoDirection = WireDirection.WireUp; ComeDirection = WireDirection.WireDown; } else { if (wire.WireData[3] != 0) { GoDirection = WireDirection.WireRight; ComeDirection = WireDirection.WireLeft; } else { ComeDirection = WireDirection.WireRight; GoDirection = WireDirection.WireLeft; } } } } #endregion break; } } else { ComeDirection = WireDirection.WireRight; GoDirection = WireDirection.WireLeft; } switch (GoDirection) { case WireDirection.WireUp: Vector = new IntVector(Vector.X, Vector.Y + 1); break; case WireDirection.WireLeft: Vector = new IntVector(Vector.X - 1, Vector.Y); break; case WireDirection.WireRight: Vector = new IntVector(Vector.X + 1, Vector.Y); break; case WireDirection.WireDown: Vector = new IntVector(Vector.X, Vector.Y - 1); break; } if (Vector.X > GameConfig.WidthX - 1) { Vector = new IntVector(GameConfig.WidthX - 1, Vector.Y); GoDirection = WireDirection.WireLeft; ComeDirection = WireDirection.WireRight; } if (Vector.X < 0) { //Vector = new IntVector(0, Vector.Y); GoDirection = WireDirection.WireLeft; ComeDirection = WireDirection.WireRight; var f = Vector.ToUIVector2() + new Vector2(GameConfig.GirdSize / 2f, GameConfig.GirdSize / 2f); this.RunAction(MGSequence.Actions(MGMoveTo.ActionWithDuration(3, f), MGCallFunc.ActionWithTarget(() => { //todo: GameOver if (_islive) { //if (TeachingScene.ShardMainGame().IsTeaching) //{ // TeachingScene.ShardMainGame().IsTeaching = false; // TeachingScene.ShardMainGame().RunAction(MGSequence.Actions(MGJumpBy.ActionWithDuration(.8f, new Vector2(0, 10), 10, 7), MGCallFunc.ActionWithTarget(() => // { // TeachingScene.ShardMainGame().Position = new Vector2(); // Control.SharedControl().ReplaceScene(Control.SceneType.GameOverSceneType); // }))); //} //else { if (CardShowLayer.SharedCardShow() == null) { MainGameScene.ShardMainGame().RunAction(MGSequence.Actions(MGJumpBy.ActionWithDuration(.8f, new Vector2(0, 10), 10, 7), MGCallFunc.ActionWithTarget(() => { MainGameScene.ShardMainGame().Position = new Vector2(); Control.SharedControl().ReplaceScene(Control.SceneType.GameOverSceneType); }))); } else { if (!CardShowLayer.SharedCardShow().IsHas[Vector.Y]) { MainGameScene.ShardMainGame().RunAction(MGSequence.Actions(MGJumpBy.ActionWithDuration(1, new Vector2(0, 10), 10, 10), MGCallFunc.ActionWithTarget(() => { MainGameScene.ShardMainGame().Position = new Vector2(); Control.SharedControl().ReplaceScene(Control.SceneType.GameOverSceneType); }))); } } } } //var actor = new Actor(); //ZombieShowLayer.SharedZombieShow().AddChild(actor); //actor.Run(); }))); return; } if (Vector.Y > GameConfig.HightY - 1) { Vector = new IntVector(Vector.X, Vector.Y - 1); GoDirection = WireDirection.WireLeft; ComeDirection = WireDirection.WireRight; } if (Vector.Y < 0) { Vector = new IntVector(Vector.X, 0); GoDirection = WireDirection.WireLeft; ComeDirection = WireDirection.WireRight; } var w = WireShowLayer.SharedWireShow().WireDictionary[Vector]; var fist = w.Vector.ToUIVector2() + new Vector2(GameConfig.GirdSize / 2f, GameConfig.GirdSize / 2f); float t = Vector2.Distance(fist, Position) / 94f * 3.5f; if (Speed == 0) { t = t / 2f; } else if (Speed == 2) { t = t * 1.5f; } this.RunAction(MGSequence.Actions(MGMoveTo.ActionWithDuration(t, fist), MGCallFunc.ActionWithTarget(() => { FindPath(w); }))); }