/// <summary>
        /// 系统菜单界面
        /// </summary>
        /// <param name="context"></param>
        public ScreenMenuSystem(SimulatorContext context) : base(context)
        {
            _background = Context.Util.GetFrameBitmap(109 - 39 + 1, 91 - 29 + 1);
            var   canvas = context.GraphicsFactory.NewCanvas();
            Paint paint  = new Paint(Constants.COLOR_BLACK);

            ImageBuilder arrowUpImg = Context.GraphicsFactory.NewImageBuilder(7, 4);

            canvas.SetBitmap(arrowUpImg);
            canvas.DrawColor(Constants.COLOR_WHITE);
            canvas.DrawLine(3, 0, 4, 0, paint);
            canvas.DrawLine(2, 1, 5, 1, paint);
            canvas.DrawLine(1, 2, 6, 2, paint);
            canvas.DrawLine(0, 3, 7, 3, paint);

            ImageBuilder arrowDownImg = Context.GraphicsFactory.NewImageBuilder(7, 4);

            canvas.SetBitmap(arrowDownImg);
            canvas.DrawColor(Constants.COLOR_WHITE);
            canvas.DrawLine(0, 0, 7, 0, paint);
            canvas.DrawLine(1, 1, 6, 1, paint);
            canvas.DrawLine(2, 2, 5, 2, paint);
            canvas.DrawLine(3, 3, 4, 3, paint);

            _arrowImgs = new ImageBuilder[] { arrowDownImg, arrowUpImg };
        }
        /// <summary>
        /// 通用菜单
        /// </summary>
        /// <param name="context"></param>
        public ScreenCommonMenu(IEnumerable <string> items, Action <int> Callback, SimulatorContext context) : base(context)
        {
            var byteItmes = items.Select(m => m.GetBytes()).ToArray();

            var colCount = byteItmes.Max(m => m.Length);

            var width  = 8 * colCount;
            var height = 16 * byteItmes.Length;

            _background = Context.Util.GetFrameBitmap(width + Padx * 2, height + Pady * 2);

            _menuItemsRect = new Rectangle(
                (Constants.SCREEN_WIDTH - width) / 2,
                (Constants.SCREEN_HEIGHT - height) / 2,
                width,
                height);

            _menuItems = byteItmes.Select(m =>
            {
                if (m.Length < colCount)
                {
                    var nm = new byte[colCount];
                    Array.Copy(m, 0, nm, 0, m.Length);
                    return(nm);
                }
                else
                {
                    return(m);
                }
            }).ToArray();
            this.Callback = Callback;
        }
Пример #3
0
 /// <summary>
 /// ???
 /// </summary>
 /// <param name="context"></param>
 public CommandDisCmp(ArraySegment <byte> data, SimulatorContext context) : base(data, 8, context)
 {
     _varIndex = data.Get2BytesUInt(0);
     _value    = data.Get2BytesUInt(2);
     _addr1    = data.Get2BytesUInt(4);
     _addr2    = data.Get2BytesUInt(6);
 }
Пример #4
0
        /// <summary>
        /// 主界面
        /// </summary>
        /// <param name="context">上下文对象</param>
        /// <param name="newGame">是否新游戏</param>
        public ScreenMainGame(SimulatorContext context, bool newGame) : base(context)
        {
            if (newGame)  //开始新游戏
            {
                Context.CombatManage.EnableRandomCombat = false;
                Context.ScriptProcess.ScriptState.InitGlobalVar();
                Context.ScriptProcess.ScriptState.InitGlobalEvents();
                Context.SceneMap.SceneNPCs = new NPC[41];
                Context.PlayContext.PlayerCharacters.Clear();
                Context.GoodsManage.Clear();
                Context.PlayContext.Money = 0;
                Context.ScriptProcess.StartChapter(1, 1);
                Context.ScriptProcess.EnableExecuteScript = true;
                Context.ScriptProcess.ScriptRunning       = true;
            }
            else    //再续前缘
            {
                Context.SceneMap.ReLoadMap();

                if (Context.PlayContext.PlayerCharacter == null)
                {
                    Context.PlayContext.CreateActor(1, 4, 3);
                    //Log.e("error", "存档读取出错");
                }
                Context.ScriptProcess.LoadScript(Context.SceneMap.ScriptType, Context.SceneMap.ScriptIndex);
                Context.ScriptProcess.EnableExecuteScript = true;
                Context.ScriptProcess.ScriptRunning       = false;
            }
        }
Пример #5
0
 /// <summary>
 /// 使用指定数量的物品命令
 /// </summary>
 /// <param name="context"></param>
 public CommandUseGoodsNum(ArraySegment <byte> data, SimulatorContext context) : base(data, 8, context)
 {
     _type    = data.Get2BytesUInt(0);
     _index   = data.Get2BytesUInt(2);
     _num     = data.Get2BytesUInt(4);
     _address = data.Get2BytesUInt(6);
 }
Пример #6
0
        /// <summary>
        /// 读取保存Screen
        /// </summary>
        /// <param name="operate"></param>
        public ScreenSaveLoadGame(SimulatorContext context, SaveLoadOperate operate) : base(context)
        {
            _curOperate     = operate;
            _backgroudImage = Context.LibData.GetImage(2, operate == SaveLoadOperate.LOAD ? 16 : 15);
            _headImgs.Add(new List <ResImage>());
            _headImgs.Add(new List <ResImage>());
            _headImgs.Add(new List <ResImage>());

            for (int i = 0; i < 3; i++)
            {
                string fileName = $"./assets/saves/{context.LibData.Hash}_{i}";

                Stream stream = Context.StreamProvider.GetStream(fileName);
                if (stream != null)
                {
                    try
                    {
                        _texts[i] = FormatSaveName(GetSceneNameAndHeads(stream, _headImgs[i]));
                    }
                    finally
                    {
                        stream.Dispose();
                    }
                }
            }
        }
 /// <summary>
 /// 多目标动作
 /// </summary>
 /// <param name="context"></param>
 /// <param name="attacker"></param>
 /// <param name="targets"></param>
 public ActionMultiTarget(SimulatorContext context, FightingCharacter attacker, List <FightingCharacter> targets) : base(context)
 {
     Executor = attacker;
     Targets  = new List <FightingCharacter>();
     Targets.AddRange(targets);
     RaiseAnimations = new List <RaiseAnimation>();
 }
        /// <summary>
        /// 多人装备选择界面
        /// </summary>
        /// <param name="context"></param>
        /// <param name="characters">角色列表</param>
        /// <param name="goods">当前选择进行装备的装备</param>
        public MutilCharacterEquipScreen(SimulatorContext context, List <PlayerCharacter> characters, BaseGoods goods) : base(context)
        {
            //HACK 此处需要测试是否正常运行
            _characters = characters;
            _goods      = goods;

            _background = Context.Util.GetFrameBitmap(16 * 5 + 6, 6 + 16 * _characters.Count);
            _names      = ExtensionFunction.DyadicArrayByte(_characters.Count, 11);//new byte[list.Count][11];
            for (int i = 0; i < _names.Length; i++)
            {
                for (int j = 0; j < 10; j++)
                {
                    _names[i][j] = (byte)' ';
                }
                try
                {
                    byte[] tmp = _characters[i].Name.GetBytes();
                    Array.Copy(tmp, 0, _names[i], 0, tmp.Length);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex);
                }
            }
        }
Пример #9
0
            public CommandSayOperate(ArraySegment <byte> data, SimulatorContext context) : base(context)
            {
                var start = data.Offset;
                var code  = data.Array;

                _content = code.GetStringBytes(start + 2);

                //获取头像资源索引
                var _picIndex = code.Get2BytesUInt(start);

                if (_picIndex == 0)                                       //没有头像
                {
                    _rectangle       = new Rectangle(9, 55, 142, 41 - 1); // new RectangleF(9, 55, 142, 41 - 0.5f);
                    _rectangleTop    = new Rectangle(14, 58, 131, 17);
                    _rectangleBottom = new Rectangle(14, 76, 131, 17);
                }
                else    //有头像
                {
                    _headImg = Context.LibData.GetImage(1, _picIndex);

                    _rectangle       = new Rectangle(9, 50, 142, 46 - 1); // new RectangleF(9, 50, 142, 46 - 0.5f);
                    _rectangleTop    = new Rectangle(44, 58, 101, 17);
                    _rectangleBottom = new Rectangle(14, 76, 131, 17);
                }

                _paint.SetColor(Constants.COLOR_BLACK);
                _paint.SetStyle(PaintStyle.FILL_AND_STROKE);

                _indexOfText = 0;
                _indexOfNext = 0;
            }
Пример #10
0
        /// <summary>
        /// 战斗胜利
        /// </summary>
        /// <param name="context"></param>
        /// <param name="exp"></param>
        /// <param name="money"></param>
        /// <param name="goodslist"></param>
        /// <param name="characters">等级提升的角色列表</param>
        public CombatSuccess(SimulatorContext context, int exp, int money, List <BaseGoods> goodslist, List <PlayerCharacter> characters) : base(context)
        {
            _gainGoods  = goodslist;
            _msgScreens = new List <BaseScreen>();
            string estr = exp.ToString();

            _msgScreens.Add(new MsgScreen(Context, 18, "获得经验     ".Substring(0, 9 - estr.Length) + estr));

            string mstr = money.ToString();

            _msgScreens.Add(new MsgScreen(Context, 46, "战斗获得        ".Substring(0, 10 - mstr.Length) + mstr + "钱"));

            _levelUpScreens = new List <BaseScreen>();

            foreach (PlayerCharacter p in characters)
            {
                _levelUpScreens.Add(new MsgScreen(Context, p.Name + "修行提升"));
                _levelUpScreens.Add(new LevelupScreen(Context, p));
                if (p.LevelupChain.GetLearnMagicNum(p.Level) >
                    p.LevelupChain.GetLearnMagicNum(p.Level - 1))
                {
                    _levelUpScreens.Add(new LearnMagicScreen(Context, p.Name, p.MagicChain[p.LevelupChain.GetLearnMagicNum(p.Level) - 1].Name));
                }
            }
        }
Пример #11
0
        public void Check_get_context()
        {
            var context = new SimulatorContext();
            var list    = context.Set <FootballerRole>().ToList();

            Assert.IsTrue(context.IsOpen);
        }
Пример #12
0
        /// <summary>
        /// 战斗胜利消息界面
        /// </summary>
        /// <param name="context"></param>
        /// <param name="top">消息显示Y坐标</param>
        /// <param name="msg"></param>
        public MsgScreen(SimulatorContext context, int top, string msg) : base(context)
        {
            byte[] msgData;
            try
            {
                msgData = msg.GetBytes();
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
                msgData = new byte[0];
            }

            ResImage side = Context.LibData.GetImage(2, 8);

            _messageImg = Context.GraphicsFactory.NewImageBuilder(msgData.Length * 8 + 8, 24);
            ICanvas canvas = Context.GraphicsFactory.NewCanvas(_messageImg);;

            canvas.DrawColor(Constants.COLOR_WHITE);
            side.Draw(canvas, 1, 0, 0);
            side.Draw(canvas, 2, _messageImg.Width - 3, 0);

            Paint paint = new Paint(PaintStyle.FILL_AND_STROKE, Constants.COLOR_BLACK);

            canvas.DrawLine(0, 1, _messageImg.Width, 1, paint);
            canvas.DrawLine(0, 22, _messageImg.Width, 22, paint);
            TextRender.DrawText(canvas, msgData, 4, 4);

            _left = (160 - _messageImg.Width) / 2;
            _top  = top;
        }
Пример #13
0
        /// <summary>
        /// 战斗中显示玩家异常状态界面
        /// </summary>
        /// <param name="context"></param>
        /// <param name="combatUI"></param>
        public MenuState(SimulatorContext context, CombatUI combatUI) : base(context, combatUI)
        {
            _background = Context.LibData.GetImage(2, 11);
            _marker     = Context.LibData.GetImage(2, 12);

            _curCharacterIndex = _combatUI.CurCharacterIndex;
        }
Пример #14
0
        /// <summary>
        /// 等级提升界面
        /// </summary>
        /// <param name="context"></param>
        /// <param name="character"></param>
        public LevelupScreen(SimulatorContext context, PlayerCharacter character) : base(context)
        {
            _infoImg = Context.LibData.GetImage(2, 9)[0];

            ICanvas         canvas       = Context.GraphicsFactory.NewCanvas(_infoImg);;
            ResLevelupChain levelupChain = character.LevelupChain;
            int             curl         = character.Level;

            Context.Util.DrawSmallNum(canvas, character.HP, 37, 9); character.HP = character.MaxHP;
            Context.Util.DrawSmallNum(canvas, character.MaxHP - (levelupChain.GetMaxHP(curl) - levelupChain.GetMaxHP(curl - 1)), 56, 9);
            Context.Util.DrawSmallNum(canvas, character.MaxHP, 86, 9);
            Context.Util.DrawSmallNum(canvas, character.MaxHP, 105, 9);
            Context.Util.DrawSmallNum(canvas, character.MP, 37, 21); character.MP = character.MaxMP;
            Context.Util.DrawSmallNum(canvas, character.MaxMP - (levelupChain.GetMaxMP(curl) - levelupChain.GetMaxMP(curl - 1)), 56, 21);
            Context.Util.DrawSmallNum(canvas, character.MaxMP, 86, 21);
            Context.Util.DrawSmallNum(canvas, character.MaxMP, 105, 21);
            Context.Util.DrawSmallNum(canvas, character.Attack - (levelupChain.GetAttack(curl) - levelupChain.GetAttack(curl - 1)), 47, 33);
            Context.Util.DrawSmallNum(canvas, character.Attack, 96, 33);
            Context.Util.DrawSmallNum(canvas, character.Defend - (levelupChain.GetDefend(curl) - levelupChain.GetDefend(curl - 1)), 47, 45);
            Context.Util.DrawSmallNum(canvas, character.Defend, 96, 45);
            Context.Util.DrawSmallNum(canvas, character.Speed - (levelupChain.GetSpeed(curl) - levelupChain.GetSpeed(curl - 1)), 47, 57);
            Context.Util.DrawSmallNum(canvas, character.Speed, 96, 57);
            Context.Util.DrawSmallNum(canvas, character.Lingli - (levelupChain.GetLingli(curl) - levelupChain.GetLingli(curl - 1)), 47, 69);
            Context.Util.DrawSmallNum(canvas, character.Lingli, 96, 69);
            Context.Util.DrawSmallNum(canvas, character.Luck - (levelupChain.GetLuck(curl) - levelupChain.GetLuck(curl - 1)), 47, 81);
            Context.Util.DrawSmallNum(canvas, character.Luck, 96, 81);
        }
Пример #15
0
            public CommandNpcStepOperate(ArraySegment <byte> data, SimulatorContext context) : base(context)
            {
                var start = data.Offset;
                var code  = data.Array;

                _id     = code.Get2BytesUInt(start);
                _faceTo = (Direction)code.Get2BytesUInt(start + 2);
                _step   = code.Get2BytesUInt(start + 4);

                _processTime = 0;
                if (_id == 0)   //主角动作
                {
                    PlayerCharacter character = Context.PlayContext.PlayerCharacter;
                    character.Direction = _faceTo;
                    character.SetStep(_step);
                    _interval = 300;
                }
                else    //NPC
                {
                    NPC npc = Context.SceneMap.SceneNPCs[_id];
                    npc.Direction = _faceTo;
                    npc.SetStep(_step);
                    if (Context.SceneMap.IsNpcVisible(npc))
                    {
                        _interval = 300;
                    }
                    else
                    {
                        _interval = 0;
                    }
                }
            }
Пример #16
0
            public CommandFaceToFaceOperate(ArraySegment <byte> data, SimulatorContext context) : base(context)
            {
                _characterId1 = data.Get2BytesUInt(0);
                _characterId2 = data.Get2BytesUInt(2);

                Character character1 = GetCharacter(_characterId1);
                Character character2 = GetCharacter(_characterId2);
                Point     point1     = character1.PosInMap;
                Point     point2     = character2.PosInMap;

                if (point1.X > point2.X)
                {
                    character2.Direction = Direction.East;
                }
                else if (point1.X < point2.X)
                {
                    character2.Direction = Direction.West;
                }
                else
                {
                    if (point1.Y > point2.Y)
                    {
                        character2.Direction = Direction.South;
                    }
                    else if (point1.Y < point2.Y)
                    {
                        character2.Direction = Direction.North;
                    }
                }
            }
Пример #17
0
        public EquipSelectedScreen(SimulatorContext context, IList <PlayerCharacter> _list, BaseGoods goods) : base(context)
        {
            _goods    = goods;
            list      = _list;
            bg        = Context.Util.GetFrameBitmap(16 * 5 + 6, 6 + 16 * list.Count);
            itemsText = ExtensionFunction.DyadicArrayByte(list.Count, 11);//new byte[list.Count][11];

            for (int i = 0; i < itemsText.Length; i++)
            {
                itemsText[i] = new byte[11];
            }

            for (int i = 0; i < itemsText.Length; i++)
            {
                for (int j = 0; j < 10; j++)
                {
                    itemsText[i][j] = (byte)' ';
                }
                try
                {
                    byte[] tmp = list[i].Name.GetBytes();
                    Array.Copy(tmp, 0, itemsText[i], 0, tmp.Length);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex);
                }
            }
        }
Пример #18
0
        public TextRender(SimulatorContext context) : base(context)
        {
            LoadData();

            _hzkBitmapBuilder = context.GraphicsFactory.NewImageBuilder(16, 16);
            _ascBitmapBuilder = context.GraphicsFactory.NewImageBuilder(8, 16);
        }
Пример #19
0
        private FootballerRole[] SeedFootballerRoles(SimulatorContext context)
        {
            var list = new FootballerRole[]
            {
                new FootballerRole()
                {
                    Caption = "Goalkeeper"
                },
                new FootballerRole()
                {
                    Caption = "Defender"
                },
                new FootballerRole()
                {
                    Caption = "Midfielder"
                },
                new FootballerRole()
                {
                    Caption = "Forward"
                }
            };

            context.FootballerRoles.AddOrUpdate(el => el.Caption, list);
            context.SaveChanges();
            return(list);
        }
 /// <summary>
 /// 属性测试命令
 /// </summary>
 /// <param name="context"></param>
 public CommandAttributeTest(ArraySegment <byte> data, SimulatorContext context) : base(data, 10, context)
 {
     _actorid = data.Get2BytesUInt(0);
     _type    = data.Get2BytesUInt(2);
     _value   = data.Get2BytesUInt(4);
     _addr1   = data.Get2BytesUInt(6);
     _addr2   = data.Get2BytesUInt(8);
 }
Пример #21
0
 /// <summary>
 /// 测试物品数量命令
 /// </summary>
 /// <param name="context"></param>
 public CommandTestGoodsNum(ArraySegment <byte> data, SimulatorContext context) : base(data, 10, context)
 {
     _type  = data.Get2BytesUInt(0);
     _index = data.Get2BytesUInt(2);
     _num   = data.Get2BytesUInt(4);
     _addr1 = data.Get2BytesUInt(6);
     _addr2 = data.Get2BytesUInt(8);
 }
Пример #22
0
        private void InitBackground(SimulatorContext context)
        {
            _background = context.GraphicsFactory.NewImageBuilder(136, 55);
            ICanvas canvas = Context.GraphicsFactory.NewCanvas(_background);;

            canvas.DrawColor(Constants.COLOR_WHITE);
            canvas.DrawRect(1, 1, 136 - 2, 55 - 2, new Paint(PaintStyle.STROKE, Constants.COLOR_BLACK));
        }
 /// <summary>
 /// 吃药界面
 /// </summary>
 /// <param name="context"></param>
 /// <param name="goods"></param>
 public ScreenTakeMedicine(SimulatorContext context, BaseGoods goods) : base(context)
 {
     _medicine = goods;
     if (Context.PlayContext.PlayerCharacters.Count > 0)
     {
         _characterIndex = 0;
     }
 }
            public CommandCreateCharacterOperate(ArraySegment <byte> data, SimulatorContext context) : base(context)
            {
                _id = data.Get2BytesUInt(0);
                _x  = data.Get2BytesUInt(2);
                _y  = data.Get2BytesUInt(4);

                Context.PlayContext.CreateActor(_id, _x, _y);
            }
Пример #25
0
 public CommandGameSaveOperate(SimulatorContext context) : base(context)
 {
     _end = false;
     Context.PushScreen(new ScreenSaveLoadGame(Context, SaveLoadOperate.SAVE)
     {
         CallBack = () => _end = true
     });
 }
Пример #26
0
            public CommandMoveOperate(ArraySegment <byte> data, SimulatorContext context) : base(context)
            {
                _npcId        = data.Get2BytesUInt(0);
                _destinationX = data.Get2BytesUInt(2);
                _destinationY = data.Get2BytesUInt(4);

                _targetNPC = Context.SceneMap.SceneNPCs[_npcId];
                _interval  = 400;
            }
Пример #27
0
        /// <summary>
        /// 消息框界面
        /// </summary>
        /// <param name="context"></param>
        /// <param name="message">消息</param>
        /// <param name="callback">确认的回调</param>
        public ScreenMessageBox(SimulatorContext context, string message, Action callback) : base(context)
        {
            //TODO 确认修改后是否正常运行
            _callback = callback;

            _message = message ?? string.Empty;

            InitBackground(context);
        }
Пример #28
0
            public CommandTimeMsgOperate(ArraySegment <byte> data, SimulatorContext context) : base(context)
            {
                _time    = data.Get2BytesUInt(0);
                _message = data.GetString(2);

                _downKey      = SimulatorKeys.KEY_INVALID;
                _isAnyKeyDown = false;
                _countDown    = _time * 10;
            }
Пример #29
0
 public CommandMenuOperate(ArraySegment <byte> data, SimulatorContext context) : base(context)
 {
     _varIndex  = data.Get2BytesUInt(0);
     _menuItems = data.GetString(2).Split(' ');
     _menu      = new ScreenCommonMenu(_menuItems, selectedIndex =>
     {
         Context.ScriptProcess.ScriptState.Variables[_varIndex] = selectedIndex;
         _finished = true;
     }, Context);
     Context.PushScreen(_menu);
 }
Пример #30
0
        /// <summary>
        /// 角色穿戴界面
        /// </summary>
        /// <param name="context"></param>
        public ScreenCharacterWearing(SimulatorContext context) : base(context)
        {
            _nameImg = Context.Util.GetFrameBitmap(92 - 9 + 1, 29 - 10 + 1);  //Bitmap.createBitmap(92 - 9 + 1, 29 - 10 + 1, Bitmap.Config.ARGB_8888);
            _descImg = Context.Util.GetFrameBitmap(151 - 9 + 1, 65 - 28 + 1); //Bitmap.createBitmap(151 - 9 + 1, 65 - 28 + 1, Bitmap.Config.ARGB_8888);

            if (Context.PlayContext.PlayerCharacters.Count > 0)
            {
                _curEquipments     = Context.PlayContext.PlayerCharacters[0].Equipments;
                _curCharacterIndex = 0;
            }
        }