internal bool Evaluate(TagData inData, object inContext, out TagEventData outEvent) { outEvent = new TagEventData(m_EventId); outEvent.IsClosing = inData.IsClosing(); switch (m_DataMode) { case DataMode.String: { if (inData.Data.IsEmpty) { outEvent.StringArgument = m_DefaultString; } else { outEvent.StringArgument = inData.Data; } break; } case DataMode.Float: { float arg; if (!StringParser.TryParseFloat(inData.Data, out arg)) { arg = m_DefaultValue.AsFloat(); } outEvent.Argument0 = arg; break; } case DataMode.Bool: { bool arg; if (!StringParser.TryParseBool(inData.Data, out arg)) { arg = m_DefaultValue.AsBool(); } outEvent.Argument0 = arg; break; } case DataMode.StringHash: { StringHash32 arg; if (!StringHash32.TryParse(inData.Data, out arg)) { arg = m_DefaultValue.AsStringHash(); } outEvent.Argument0 = arg; break; } } if (m_HandleClosing && outEvent.IsClosing) { outEvent.Type = m_EventClosingId; if (m_EventClosingDelegate != null) { m_EventClosingDelegate(inData, inContext, ref outEvent); } return(true); } else { if (m_EventDelegate != null) { m_EventDelegate(inData, inContext, ref outEvent); } return(true); } }
/// <summary> /// Attempts to parse a string slice into a variant. /// </summary> static public bool TryParse(StringSlice inSlice, bool inbAllowImplicitHash, out Variant outValue) { inSlice = inSlice.Trim(); if (inSlice.Length <= 0 || inSlice.Equals("null", true)) { outValue = Variant.Null; return(true); } if (inSlice.StartsWith(StringHashing.CustomHashPrefix) || inSlice.StartsWith(StringHashing.StringPrefix) || (inSlice.Length >= 2 && inSlice.StartsWith('"') && inSlice.EndsWith('"'))) { StringHash32 hash; if (StringHash32.TryParse(inSlice, out hash)) { outValue = hash; return(true); } } bool bBoolVal; if (StringParser.TryParseBool(inSlice, out bBoolVal)) { outValue = new Variant(bBoolVal); return(true); } int intVal; if (StringParser.TryParseInt(inSlice, out intVal)) { outValue = new Variant(intVal); return(true); } uint uintVal; if (StringParser.TryParseUInt(inSlice, out uintVal)) { outValue = new Variant(uintVal); return(true); } float floatVal; if (StringParser.TryParseFloat(inSlice, out floatVal)) { outValue = new Variant(floatVal); return(true); } if (inbAllowImplicitHash) { StringHash32 hash; if (StringHash32.TryParse(inSlice, out hash)) { outValue = hash; return(true); } } outValue = default(Variant); return(false); }