コード例 #1
0
 public async Task <bool> MoveDownCharacter(string charid)
 {
     return(await TakeCharacterAction(charid, (res, ch) =>
     {
         state.MoveDownCharacter(ch);
         saveCallback();
         res.Data = state.ToRemote();
     }));
 }
コード例 #2
0
 private void DownClicked()
 {
     if (_SelectedCharacter != null)
     {
         if (_CombatState.CombatList.Contains(_SelectedCharacter))
         {
             _CombatState.MoveDownCharacter(_SelectedCharacter);
         }
     }
 }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }