/// <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; }
/// <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); }
/// <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; } }
/// <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); }
/// <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); } } }
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; }
/// <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)); } } }
public void Check_get_context() { var context = new SimulatorContext(); var list = context.Set <FootballerRole>().ToList(); Assert.IsTrue(context.IsOpen); }
/// <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; }
/// <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; }
/// <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); }
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; } } }
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; } } }
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); } } }
public TextRender(SimulatorContext context) : base(context) { LoadData(); _hzkBitmapBuilder = context.GraphicsFactory.NewImageBuilder(16, 16); _ascBitmapBuilder = context.GraphicsFactory.NewImageBuilder(8, 16); }
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); }
/// <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); }
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); }
public CommandGameSaveOperate(SimulatorContext context) : base(context) { _end = false; Context.PushScreen(new ScreenSaveLoadGame(Context, SaveLoadOperate.SAVE) { CallBack = () => _end = true }); }
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; }
/// <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); }
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; }
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); }
/// <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; } }