Exemple #1
0
        /// <summary>
        /// Setup the control to display the stats of <paramref name="o"/> as percieved
        /// by <paramref name="observer"/>
        /// </summary>
        /// <param name="observer"></param>
        /// <param name="o"></param>
        /// <param name="width"></param>
        /// <param name="height"></param>
        public void InitializeComponent(IActor observer, IHasStats o, int width, int height)
        {
            var stats = observer.CurrentLocation.World.AllStats.All;

            List <string> lines    = new List <string>();
            int           maxLines = height - 6;

            lines.Add("Name:" + o.Name);

            if (o.Adjectives.Any())
            {
                lines.Add("Adjectives:" + string.Join(',', o.Adjectives));
            }

            var asActor = o as IActor;

            if (asActor != null)
            {
                lines.Add("Factions:" + string.Join(',', asActor.FactionMembership));
            }

            if (o.InjurySystem?.Name != null)
            {
                lines.Add("Damage:" + o.InjurySystem.Name);
            }

            //output stats
            var finalStats = o.GetFinalStats(asActor ?? observer);

            var sbStatLine1 = new StringBuilder();
            var sbStatLine2 = new StringBuilder();
            var sbStatLine3 = new StringBuilder();

            foreach (var s in stats)
            {
                if (s == Stat.Value)
                {
                    continue;
                }

                string stat     = s.ToString().Substring(0, 2);
                string val      = o.BaseStats[s].ToString();
                string valFinal = "";

                if (Math.Abs(o.BaseStats[s] - finalStats[s]) > 0.0001)
                {
                    valFinal = $"({finalStats[s]:N0})";
                }

                int maxWidth = Math.Max(3, Math.Max(val.Length, valFinal.Length));

                stat     = stat.PadRight(maxWidth);
                val      = val.PadRight(maxWidth);
                valFinal = valFinal.PadRight(maxWidth);

                sbStatLine1.Append(stat);
                sbStatLine2.Append(val);
                sbStatLine3.Append(valFinal);
            }

            lines.Add(sbStatLine1.ToString());
            lines.Add(sbStatLine2.ToString());
            lines.Add(sbStatLine3.ToString());

            if (o.BaseActions.Count > 0)
            {
                lines.Add("Actions:");
                foreach (var action in o.BaseActions)
                {
                    lines.Add(action.ToString());
                }
            }


            if (asActor != null)
            {
                lines.Add("Items:");

                if (!asActor.Items.Any())
                {
                    lines.Add("None");
                }
                else
                {
                    //output items
                    lines.AddRange(asActor.Items.Select(i => i.ToString()));
                }

                var relationships = GetRelationships(asActor).ToArray();

                if (relationships.Any())
                {
                    lines.Add("Relationships:");
                    lines.AddRange(relationships);
                }
            }

            View addLabelsTo;

            //if it is too many items
            if (lines.Count > maxLines && AllowScrolling)
            {
                //use observer scroll view
                var view = new ScrollView(new Rect(0, 0, width - 3, height - 6))
                {
                    ContentSize   = new Size(width, lines.Count + 1),
                    ContentOffset = new Point(0, 0),
                    ShowVerticalScrollIndicator   = true,
                    ShowHorizontalScrollIndicator = false
                };

                addLabelsTo = view;
                Add(view);
            }
            else
            {
                addLabelsTo = this; //otherwise just labels
            }
            for (int i = 0; i < lines.Count; i++)
            {
                if (i == maxLines && !AllowScrolling)
                {
                    addLabelsTo.Add(new Label(0, i, "..."));
                    break;
                }
                else
                {
                    addLabelsTo.Add(new Label(0, i, lines[i]));
                }
            }
        }
Exemple #2
0
 protected override double?GetAttitude(IActor performer, IHasStats target)
 {
     //value of item is total value of the item to the recipient
     return(target.GetFinalStats(performer)[Stat.Value]);
 }