예제 #1
0
        /// <summary>
        /// Adds a new <see cref="MessageItem"/> for the specified <see cref="MessageItem.Property"/>, <see cref="MessageType"/>, text format and additional values included in the text.
        /// </summary>
        /// <param name="property">The property name.</param>
        /// <param name="type">The <see cref="MessageType"/>.</param>
        /// <param name="format">The composite format string.</param>
        /// <param name="values">The values that form part of the message text.</param>
        /// <returns>A <see cref="MessageItem"/>.</returns>
        public MessageItem Add(string property, MessageType type, LText format, params object?[] values)
        {
            MessageItem item = MessageItem.CreateMessage(property, type, format, values);

            this.Add(item);
            return(item);
        }
예제 #2
0
        /// <summary>
        /// Adds a new <see cref="MessageItem"/> for a specified <see cref="MessageType"/>, text format and additional values included in the text.
        /// </summary>
        /// <param name="type">The <see cref="MessageType"/>.</param>
        /// <param name="format">The composite format string.</param>
        /// <param name="values">The values that form part of the message text.</param>
        /// <returns>A <see cref="MessageItem"/>.</returns>
        public MessageItem Add(MessageType type, LText format, params object[] values)
        {
            MessageItem item = MessageItem.CreateMessage(type, format, values);

            this.Add(item);
            return(item);
        }
예제 #3
0
        /// <summary>
        /// Adds a new <see cref="MessageItem"/> for a specified <see cref="MessageType"/> and text.
        /// </summary>
        /// <param name="type">The <see cref="MessageType"/>.</param>
        /// <param name="text">The message text.</param>
        /// <returns>A <see cref="MessageItem"/>.</returns>
        public MessageItem Add(MessageType type, LText text)
        {
            MessageItem item = MessageItem.CreateMessage(type, text);

            this.Add(item);
            return(item);
        }
예제 #4
0
        /// <summary>
        /// Adds a new <see cref="MessageItem"/> for the specified <see cref="MessageItem.Property"/>, <see cref="MessageType"/> and text.
        /// </summary>
        /// <param name="property">The property name.</param>
        /// <param name="type">The <see cref="MessageType"/>.</param>
        /// <param name="text">The message text.</param>
        /// <returns>A <see cref="MessageItem"/>.</returns>
        public MessageItem Add(string property, MessageType type, LText text)
        {
            MessageItem item = MessageItem.CreateMessage(property, type, text);

            this.Add(item);
            return(item);
        }
예제 #5
0
 /// <summary>
 /// Creates a new <see cref="MessageItem"/> with a specified <see cref="MessageType"/> and text.
 /// </summary>
 /// <param name="type">The <see cref="MessageType"/>.</param>
 /// <param name="text">The message text.</param>
 /// <returns>A <see cref="MessageItem"/>.</returns>
 public static MessageItem CreateMessage(MessageType type, LText text)
 {
     return(new MessageItem
     {
         Type = type,
         Text = text
     });
 }
예제 #6
0
 /// <summary>
 /// Creates a new <see cref="MessageItem"/> with a specified <see cref="MessageType"/>, text format and and additional values included in the text.
 /// </summary>
 /// <param name="type">The <see cref="MessageType"/>.</param>
 /// <param name="format">The composite format string.</param>
 /// <param name="values">The values that form part of the message text.</param>
 /// <returns>A <see cref="MessageItem"/>.</returns>
 public static MessageItem CreateMessage(MessageType type, LText format, params object[] values)
 {
     return(new MessageItem
     {
         Type = type,
         Text = string.Format(format, values)
     });
 }
 public void DisplayResponses(LText text)
 {
     LText[] responses = currentConversation.GetResponses(text);
     if (responses != null)
     {
         responder.SetResponses(responses);
     }
 }
예제 #8
0
 /// <summary>
 /// Creates a new <see cref="MessageItem"/> with a specified <see cref="MessageType"/>, text format and and additional values included in the text.
 /// </summary>
 /// <param name="type">The <see cref="MessageType"/>.</param>
 /// <param name="format">The composite format string.</param>
 /// <param name="values">The values that form part of the message text.</param>
 /// <returns>A <see cref="MessageItem"/>.</returns>
 public static MessageItem CreateMessage(MessageType type, LText format, params object[] values)
 {
     return(new MessageItem
     {
         Type = type,
         Text = string.Format(System.Globalization.CultureInfo.CurrentCulture, format, values)
     });
 }
예제 #9
0
    public void AddNew()
    {
        var list = new List <LText>(texts);
        var item = new LText();

        item.key = list.Count.ToString("D3");
        list.Add(item);
        texts = list.ToArray();
    }
예제 #10
0
 /// <summary>
 /// Creates a new <see cref="MessageType.Error"/> <see cref="MessageItem"/> with the specified <see cref="Property"/> and text.
 /// </summary>
 /// <param name="property">The property name.</param>
 /// <param name="text">The message text.</param>
 /// <returns>A <see cref="MessageItem"/>.</returns>
 public static MessageItem CreateErrorMessage(string property, LText text)
 {
     return(new MessageItem
     {
         Property = property,
         Type = MessageType.Error,
         Text = text
     });
 }
예제 #11
0
 /// <summary>
 /// Creates a new <see cref="MessageItem"/> with the specified <see cref="Property"/>, <see cref="MessageType"/> and text.
 /// </summary>
 /// <param name="property">The property name.</param>
 /// <param name="type">The <see cref="MessageType"/>.</param>
 /// <param name="text">The message text.</param>
 /// <returns>A <see cref="MessageItem"/>.</returns>
 public static MessageItem CreateMessage(string property, MessageType type, LText text)
 {
     return(new MessageItem
     {
         Property = property,
         Type = type,
         Text = text
     });
 }
예제 #12
0
 /// <summary>
 /// Creates a new <see cref="MessageType.Error"/> <see cref="MessageItem"/> with the specified <see cref="Property"/>, text format and additional values included in the text.
 /// </summary>
 /// <param name="property">The property name.</param>
 /// <param name="format">The composite format string.</param>
 /// <param name="values">The values that form part of the message text.</param>
 /// <returns>A <see cref="MessageItem"/>.</returns>
 public static MessageItem CreateErrorMessage(string property, LText format, params object[] values)
 {
     return(new MessageItem
     {
         Property = property,
         Type = MessageType.Error,
         Text = string.Format(System.Globalization.CultureInfo.CurrentCulture, format, values)
     });
 }
예제 #13
0
 /// <summary>
 /// Creates a new <see cref="MessageType.Error"/> <see cref="MessageItem"/> with the specified <see cref="Property"/>, text format and additional values included in the text.
 /// </summary>
 /// <param name="property">The property name.</param>
 /// <param name="format">The composite format string.</param>
 /// <param name="values">The values that form part of the message text.</param>
 /// <returns>A <see cref="MessageItem"/>.</returns>
 public static MessageItem CreateErrorMessage(string property, LText format, params object[] values)
 {
     return(new MessageItem
     {
         Property = property,
         Type = MessageType.Error,
         Text = string.Format(format, values)
     });
 }
예제 #14
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CompareValueRule{TEntity, TProperty}"/> class specifying the compare to property.
        /// </summary>
        /// <param name="compareOperator">The <see cref="CompareOperator"/>.</param>
        /// <param name="compareToPropertyExpression">The <see cref="Expression"/> to reference the compare to entity property.</param>
        /// <param name="compareToText">The compare to text <see cref="LText"/> to be passed for the error message (default is to derive the text from the property itself).</param>
        public ComparePropertyRule(CompareOperator compareOperator, Expression <Func <TEntity, TCompareProperty> > compareToPropertyExpression, LText compareToText = null) : base(compareOperator)
        {
            if (compareToPropertyExpression == null)
            {
                throw new ArgumentNullException("compareToPropertyExpression");
            }

            _compareTo = PropertyExpression <TEntity, TCompareProperty> .Create(compareToPropertyExpression, true);

            _compareToText = compareToText;
        }
예제 #15
0
        /// <summary>
        /// Specifies that the collection is to be checked for duplicates using the specified item property.
        /// </summary>
        /// <typeparam name="TItemProperty">The item property <see cref="Type"/>.</typeparam>
        /// <param name="propertyExpression">The <see cref="Expression"/> to reference the item property that is being duplicate checked.</param>
        /// <param name="duplicateText">The duplicate text <see cref="LText"/> to be passed for the error message (default is to derive the text from the property itself where possible).</param>
        /// <returns>The <see cref="CollectionRuleItem{TItemEntity}"/> instance to support chaining/fluent.</returns>
        public CollectionRuleItem <TItemEntity> DuplicateCheck <TItemProperty>(Expression <Func <TItemEntity, TItemProperty> > propertyExpression, LText duplicateText = null)
        {
            if (_duplicateCheck)
            {
                throw new InvalidOperationException("A DuplicateCheck or UniqueKeyDuplicateCheck can only be specified once.");
            }

            _propertyExpression = PropertyExpression.Create(Check.NotNull(propertyExpression, nameof(propertyExpression)), true);
            _duplicateText      = duplicateText ?? _propertyExpression.Text;
            _duplicateCheck     = true;

            return(this);
        }
예제 #16
0
        /// <summary>
        /// Runs the <paramref name="func"/> checking against the expected outcomes.
        /// </summary>
        /// <param name="func">The function to execute.</param>
        /// <returns>The resulting <see cref="IValidationContextBase"/> where applicable; otherwise, <c>null</c>.</returns>
        public IValidationContextBase?Run(Func <IValidationContextBase> func)
        {
            PrepareExecutionContext(_username, _args);
            ExecutionContext.Current.OperationType = _operationType;

            if (IsExpectingError && !_expectedErrorType.HasValue)
            {
                _expectedErrorType = ErrorType.ValidationError;
            }

            try
            {
                var vc = Check.NotNull(func, nameof(func))();
                if (vc == null)
                {
                    Assert.Fail("The validation function returned a null IValidationContext result.");
                }

                if (vc !.HasErrors)
                {
                    LogStatus(ErrorType.ValidationError, new LText("Beef.ValidationException"), vc.Messages);
                }
                else
                {
                    LogStatus(null, null, null);
                }

                if (_expectedErrorType.HasValue)
                {
                    if (!vc !.HasErrors && _expectedErrorType != ErrorType.ValidationError)
                    {
                        Assert.Fail($"Expected ErrorType was '{_expectedErrorType}'; actual was '{ErrorType.ValidationError}'.");
                    }

                    if (_expectedErrorMessage != null)
                    {
                        var message = new LText("Beef.ValidationException");
                        if (_expectedErrorMessage != message)
                        {
                            Assert.Fail($"Expected ErrorMessage was '{_expectedErrorMessage}'; actual was '{message}'.");
                        }
                    }
                }

                if (_expectedMessages != null)
                {
                    ExpectValidationException.CompareExpectedVsActual(_expectedMessages, vc !.Messages);
                }

                return(vc);
            }
    public void SendText(LText text)
    {
        AddText(text);
        HideResponsePanel();
        LText response = currentConversation.ChooseResponse(mostRecentMessage);

        if (response != null)
        {
            StartCoroutine(NPCRespondDelayed(currentContact.conversation, response));
        }
        else
        {
            currentContact.conversation.MarkAsComplete();
        }
        currentContact.Refresh();
    }
    IEnumerator NPCRespondDelayed(LConversation conversation, LText response)
    {
        yield return(new WaitForSeconds(NPCResponseDelay));

        EventController.Event(LEvent.Message);
        if (isContactsOpen)
        {
            conversation.AddMessage(response);
        }
        else
        {
            AddText(response);
            DisplayResponses(mostRecentMessage);
        }
        // Refreshes the display for the current contact:
        currentContact.Refresh();
        data.Save();
    }
예제 #19
0
        /// <summary>
        /// Specifies that the collection is to be checked for duplicates using the item's <see cref="IUniqueKey"/> value.
        /// </summary>
        /// <param name="duplicateText">The duplicate text <see cref="LText"/> to be passed for the error message (default is to derive the text from the property itself where possible).</param>
        /// <returns>The <see cref="CollectionRuleItem{TItemEntity}"/> instance to support chaining/fluent.</returns>
        public CollectionRuleItem <TItemEntity> UniqueKeyDuplicateCheck(LText duplicateText = null)
        {
            if (_duplicateCheck)
            {
                throw new InvalidOperationException("A DuplicateCheck or UniqueKeyDuplicateCheck can only be specified once.");
            }

            if (ItemType.GetInterface(typeof(IUniqueKey).Name) == null)
            {
                throw new InvalidOperationException("A CollectionRuleItem ItemType '{_itemType.Name}' must implement 'IUniqueKey' to support UniqueKeyDuplicateCheck.");
            }

            IUniqueKey uk;

            try
            {
                uk = (IUniqueKey)Activator.CreateInstance(ItemType);
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException($"A CollectionRuleItem ItemType '{ItemType.Name}' could not be constructed as an IUniqueKey to infer UniqueKeyProperties: {ex.Message}");
            }

            if (!uk.HasUniqueKey || uk.UniqueKeyProperties == null || uk.UniqueKeyProperties.Length == 0)
            {
                throw new InvalidOperationException("A CollectionRule TProperty ItemType '{_itemType.Name}' must define the 'IUniqueKey.UniqueKeyProperties' to support CheckForDuplicates.");
            }

            _duplicateText = duplicateText;
            if (_duplicateText == null && uk.UniqueKeyProperties.Length == 1)
            {
                _duplicateText = new EntityReflectorArgs().GetReflector(ItemType).GetProperty(uk.UniqueKeyProperties[0]).PropertyExpression.Text;
            }

            if (_duplicateText == null)
            {
                _duplicateText = "Unique Key";
            }

            _duplicateCheck = true;

            return(this);
        }
    // Adds a visual text to the screen using an LText as the data source
    public LTextBehaviour AddText(LText text, bool newText = true)
    {
        checkTextScrollView();
        GameObject prefab        = text.FromPlayer ? playerTextPrefab : npcTextPrefab;
        GameObject textObject    = Instantiate(prefab, messageParent) as GameObject;
        Transform  textTransform = textObject.transform;

        textTransform.localScale = Vector3.one;
        LTextBehaviour textBehaviour = textObject.GetComponent <LTextBehaviour>();

        textBehaviour.SetText(text.Body);
        textBehaviour.SetImage(currentContact.ContactSprite);
        visualTexts.Add(textBehaviour);
        mostRecentMessage = text;
        theMessage        = textObject;
        if (newText)
        {
            currentContact.AddMessage(text);
        }
        scrollPosition.addText(theMessage);
        return(textBehaviour);
    }
예제 #21
0
        public ConstValue(Type type)
        {
            if (type == typeof(string))
            {
                Type  = new SType(typeof(LText));
                Value = new LText(true, "");
                return;
            }

            Type = new SType(type);

            if (type.IsValueType)
            {
                Value = Activator.CreateInstance(type);
            }
            else
            {
                _value       = null;
                _valueString = "null";
                _unityObject = null;
            }
        }
예제 #22
0
        public ConstValue(string constValue, Type type)
        {
            if (type == typeof(string))
            {
                Type  = new SType(typeof(LText));
                Value = new LText(true, constValue);
                return;
            }
            Type = new SType(type);

            if (type == typeof(string))
            {
                constValue = JsonConvert.SerializeObject(new LText(false, constValue));
            }

            if (type == typeof(Boolean))
            {
                constValue = JsonConvert.SerializeObject(Boolean.Parse(constValue));
            }


            _valueString = constValue;
        }
예제 #23
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ValueValidator{T}"/> class.
 /// </summary>
 /// <param name="value">The value to validate.</param>
 /// <param name="name">The value name (defaults to <see cref="ValueNameDefault"/>).</param>
 /// <param name="text">The friendly text name used in validation messages (defaults to <paramref name="name"/> as sentence case where not specified).</param>
 public ValueValidator(T value, string name = null, LText text = null)
 {
     ValidationValue = new ValidationValue <T>(null, value);
     Name            = string.IsNullOrEmpty(name) ? ValueNameDefault : name;
     Text            = text ?? Beef.CodeGen.CodeGenerator.ToSentenceCase(Name);
 }
예제 #24
0
        /// <summary>
        /// Validates the value.
        /// </summary>
        /// <param name="value">The value to validate.</param>
        /// <param name="name">The value name (defaults to <see cref="ValueValidator{T}.ValueNameDefault"/>).</param>
        /// <param name="text">The friendly text name used in validation messages (defaults to <paramref name="name"/> as sentence case where not specified).</param>
        /// <param name="throwOnError">Indicates to throw a <see cref="ValidationException"/> where an error was found.</param>
        /// <returns>A <see cref="ValueValidatorResult{TEntity, TProperty}"/>.</returns>
        public ValueValidatorResult <ValidationValue <T>, T> Validate(T value, string name = null, LText text = null, bool throwOnError = false)
        {
            var vv  = new ValidationValue <T>(null, value);
            var ctx = new PropertyContext <ValidationValue <T>, T>(new ValidationContext <ValidationValue <T> >(vv,
                                                                                                                new ValidationArgs()), value, name ?? ValueValidator <T> .ValueNameDefault, null, text);

            Invoke(ctx);
            var res = new ValueValidatorResult <ValidationValue <T>, T>(ctx);

            if (throwOnError)
            {
                res.ThrowOnError();
            }

            return(res);
        }
예제 #25
0
 /// <summary>
 /// Adds a new <see cref="MessageType.Error"/> <see cref="MessageItem"/> for the specified <see cref="MessageItem.Property"/> and text.
 /// </summary>
 /// <param name="property">The property name.</param>
 /// <param name="text">The message text.</param>
 /// <returns>A <see cref="MessageItem"/>.</returns>
 public MessageItem AddError(string property, LText text)
 {
     return(Add(property, MessageType.Error, text));
 }
예제 #26
0
 /// <summary>
 /// Adds a new <see cref="MessageType.Error"/> <see cref="MessageItem"/> for a specified text format and additional values included in the text.
 /// </summary>
 /// <param name="format">The composite format string.</param>
 /// <param name="values">The values that form part of the message text.</param>
 /// <returns>A <see cref="MessageItem"/>.</returns>
 public MessageItem AddError(LText format, params object[] values)
 {
     return(Add(MessageType.Error, format, values));
 }
예제 #27
0
 /// <summary>
 /// Adds a new <see cref="MessageType.Error"/> <see cref="MessageItem"/> for a specified text.
 /// </summary>
 /// <param name="text">The message text.</param>
 /// <returns>A <see cref="MessageItem"/>.</returns>
 public MessageItem AddError(LText text)
 {
     return(Add(MessageType.Error, text));
 }
예제 #28
0
 /// <summary>
 /// Adds a new <see cref="MessageType.Info"/> <see cref="MessageItem"/> for a specified text format and additional values included in the text.
 /// </summary>
 /// <param name="format">The composite format string.</param>
 /// <param name="values">The values that form part of the message text.</param>
 /// <returns>A <see cref="MessageItem"/>.</returns>
 public MessageItem AddInfo(LText format, params object[] values)
 {
     return(Add(MessageType.Info, format, values));
 }
예제 #29
0
 /// <summary>
 /// Adds a new <see cref="MessageType.Info"/> <see cref="MessageItem"/> for the specified <see cref="MessageItem.Property"/> and text.
 /// </summary>
 /// <param name="property">The property name.</param>
 /// <param name="text">The message text.</param>
 /// <returns>A <see cref="MessageItem"/>.</returns>
 public MessageItem AddInfo(string property, LText text)
 {
     return(Add(property, MessageType.Info, text));
 }
예제 #30
0
 /// <summary>
 /// Adds a new <see cref="MessageType.Info"/> <see cref="MessageItem"/> for the specified <see cref="MessageItem.Property"/>, text format and and additional values included in the text.
 /// </summary>
 /// <param name="property">The property name.</param>
 /// <param name="format">The composite format string.</param>
 /// <param name="values">The values that form part of the message text.</param>
 /// <returns>A <see cref="MessageItem"/>.</returns>
 public MessageItem AddInfo(string property, LText format, params object[] values)
 {
     return(Add(property, MessageType.Info, format, values));
 }