Example #1
0
        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);
            }
        }
Example #2
0
        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");
        }
Example #3
0
 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
            });
        }
Example #5
0
        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");
        }
Example #6
0
    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));
    }
Example #7
0
 public MCWire(IMCObject obj, WireDirection dir)
 {
     this._base_object = obj;
     this.connected_wire = null;
     this.dir = dir;
 }
Example #8
0
        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);
            })));
        }