public async Task <bool> CharacterActNow(string charid) { return(await TakeCharacterAction(charid, (res, ch) => { state.CharacterActNow(ch); saveCallback(); res.Data = state.ToRemote(); })); }
public override View GetView(int position, View convertView, ViewGroup parent) { LinearLayout baseLayout = (LinearLayout)convertView; if (baseLayout == null) { baseLayout = new LinearLayout(Application.Context); baseLayout.LongClickable = true; } baseLayout.RemoveAllViews(); baseLayout.LayoutParameters = new AbsListView.LayoutParams( new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent)); baseLayout.Orientation = Orientation.Vertical; baseLayout.Tag = position; LinearLayout layout = new LinearLayout(Application.Context); baseLayout.AddView(layout); layout.SetGravity(GravityFlags.CenterVertical); Character c = _State.CombatList[position]; ImageView rv = new ImageView(_View.Context); rv.SetImageDrawable(_View.Context.Resources.GetDrawable( Resource.Drawable.target16)); layout.AddView(rv); rv.Visibility = c.IsReadying?ViewStates.Visible:ViewStates.Gone; ImageView dv = new ImageView(_View.Context); dv.SetImageDrawable(_View.Context.Resources.GetDrawable( Resource.Drawable.hourglass16)); layout.AddView(dv); dv.Visibility = c.IsDelaying?ViewStates.Visible:ViewStates.Gone; TextView t = new TextView(Application.Context); if (t == null) { t = new TextView(Application.Context); } t.Text = _State.CombatList[position].Name; t.SetTextColor(Android.Graphics.Color.Black); t.Ellipsize = Android.Text.TextUtils.TruncateAt.Middle; t.Gravity = GravityFlags.CenterVertical; t.SetSingleLine(true); SetLayoutBackground(baseLayout, layout, false); if (_State.CurrentCharacter == _State.CombatList[position]) { ImageView iv = new ImageView(Application.Context); iv.SetImageDrawable(Application.Context.Resources.GetDrawable(Resource.Drawable.next16)); layout.AddView(iv); } if (_State.CombatList[position] == _Character) { layout.SetBackgroundColor(new Android.Graphics.Color(0, 0, 0)); t.SetTextColor(Android.Graphics.Color.White); } LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent)); lp.Weight = 1.0f; t.LayoutParameters = lp; t.Click += (object sender, EventArgs e) => { if (CharacterClicked != null) { CharacterClicked(this, new CharacterEventArgs() { Character = c }); } }; t.LongClickable = true; t.LongClick += (object sender, View.LongClickEventArgs e) => { ClipData data = ClipData.NewPlainText("", ""); View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(baseLayout); baseLayout.StartDrag(data, shadowBuilder, baseLayout, 0); }; layout.AddView(t); //init button Button bu = new Button(_View.Context); bu.SetHeight(45); bu.SetWidth(45); layout.AddView(bu); bu.SetBackgroundDrawable(_View.Context.Resources.GetDrawable(Resource.Drawable.blue_button)); bu.Text = c.CurrentInitiative.ToString(); bu.SetTextColor(new Android.Graphics.Color(0xff, 0xff, 0xff)); bu.Click += (object sender, EventArgs e) => { new NumberDialog("CurrentInitiative", "Initiative", c, _View.Context).Show(); }; //action button ImageButton b = new ImageButton(_View.Context); b.SetImageDrawable(_View.Context.Resources.GetDrawable(Resource.Drawable.lightning16)); layout.AddView(b); b.SetMaxHeight(45); b.SetMinimumHeight(45); b.SetMaxWidth(45); b.SetMinimumWidth(45); b.SetBackgroundDrawable(_View.Context.Resources.GetDrawable(Resource.Drawable.blue_button)); var options = new List <string>() { "Move Down", "Move Up", "Ready", "Delay", "Act Now" }; PopupUtils.AttachSimpleStringPopover(c.Name, b, options, (v, index, val) => { switch (index) { case 0: _State.MoveDownCharacter(c); break; case 1: _State.MoveUpCharacter(c); break; case 2: c.IsReadying = !c.IsReadying; break; case 3: c.IsDelaying = !c.IsDelaying; break; case 4: _State.CharacterActNow(c); break; } }); new ViewUpdateListener(c, layout, rv, dv, bu); foreach (Character follower in c.InitiativeFollowers) { TextView tv = new TextView(_View.Context); tv.SetPadding(10, 0, 0, 0); tv.Text = follower.Name; baseLayout.AddView(tv); } baseLayout.SetOnDragListener(new ListOnDragListener(this, baseLayout, layout)); return(baseLayout); }
public static CharacterActionResult TakeAction(CombatState state, CharacterActionType action, Character primaryChar, List <Character> allChars, object param) { CharacterActionResult res = CharacterActionResult.None; switch (action) { case CharacterActionType.MakeIdle: foreach (Character ch in allChars) { ch.IsIdle = true; } state.FilterList(); break; case CharacterActionType.RemoveIdle: foreach (Character ch in allChars) { ch.IsIdle = false; } state.FilterList(); break; case CharacterActionType.Clone: foreach (Character ch in allChars) { state.CloneCharacter(ch); } break; case CharacterActionType.Delete: foreach (Character ch in allChars) { state.RemoveCharacter(ch); } break; case CharacterActionType.MoveToMonsters: foreach (Character ch in allChars) { if (!ch.IsMonster) { state.RemoveCharacter(ch); ch.IsMonster = true; state.AddCharacter(ch); } } state.FilterList(); break; case CharacterActionType.MoveToParty: foreach (Character ch in allChars) { if (ch.IsMonster) { state.RemoveCharacter(ch); ch.IsMonster = false; state.AddCharacter(ch); } } state.FilterList(); break; case CharacterActionType.MoveUpInitiative: state.MoveUpCharacter(primaryChar); break; case CharacterActionType.MoveDownInitiative: state.MoveDownCharacter(primaryChar); break; case CharacterActionType.MoveAfterInitiative: state.MoveCharacterAfter(primaryChar, (Character)param); break; case CharacterActionType.MoveBeforeInitiative: state.MoveCharacterBefore(primaryChar, (Character)param); break; case CharacterActionType.RollInitiative: state.RollIndividualInitiative(primaryChar); state.SortCombatList(false, false); break; case CharacterActionType.Ready: primaryChar.IsReadying = !primaryChar.IsReadying; if (primaryChar.IsReadying && primaryChar.IsDelaying) { primaryChar.IsDelaying = false; } break; case CharacterActionType.Delay: primaryChar.IsDelaying = !primaryChar.IsDelaying; if (primaryChar.IsReadying && primaryChar.IsDelaying) { primaryChar.IsReadying = false; } break; case CharacterActionType.ActNow: if (primaryChar.IsIdle) { primaryChar.IsIdle = false; } state.CharacterActNow(primaryChar); break; case CharacterActionType.LinkInitiative: Character targetChar = (Character)param; if (primaryChar != targetChar && targetChar.InitiativeLeader == null) { state.LinkInitiative(primaryChar, (Character)param); } break; case CharacterActionType.UnlinkInitiative: state.UnlinkLeader(primaryChar); break; case CharacterActionType.AddConditon: if (param != null) { Condition c = (Condition)param; foreach (Character ch in allChars) { ActiveCondition a = new ActiveCondition(); a.Condition = c; ch.Stats.AddCondition(a); Condition.PushRecentCondition(a.Condition); } } else { res = CharacterActionResult.NeedConditionDialog; } break; case CharacterActionType.EditNotes: res = CharacterActionResult.NeedNotesDialog; break; case CharacterActionType.EditMonster: res = CharacterActionResult.NeedMonsterEditorDialog; break; case CharacterActionType.RollAttack: res = CharacterActionResult.RollAttack; break; case CharacterActionType.RollAttackSet: res = CharacterActionResult.RollAttackSet; break; case CharacterActionType.RollSave: res = CharacterActionResult.RollSave; break; case CharacterActionType.RollSkill: res = CharacterActionResult.RollSkill; break; } return(res); }