/// <summary></summary> /// <param name="refKind">The kind of variable we're this reference</param> /// <param name="refMemberName">The variable's reference type</param> /// <param name="dataValue">Actual 'data' value for the variable reference</param> /// <param name="dataTypeName">Optional type info for <paramref name="dataValue"/></param> /// <returns></returns> public MegaloScriptVariableReferenceData NewVarReference(MegaloScriptVariableReferenceType refKind, string refMemberName, int dataValue = TypeExtensions.kNone, string dataTypeName = null) { Contract.Requires(!string.IsNullOrEmpty(refMemberName)); MegaloScriptVariableReferenceData result; Proto.MegaloScriptProtoVariableReferenceMember member; MegaloScriptVariableReferenceData.Initialize(this, out result, refKind, out member, refMemberName, dataTypeName); result.Data = dataValue; return(result); }
/// <summary></summary> /// <param name="refKind">The kind of variable we're this reference</param> /// <param name="refMemberName">The variable's reference type</param> /// <param name="indexName">Actual 'data' value for the variable reference</param> /// <param name="dataTypeName">Optional type info for <paramref name="indexName"/></param> /// <returns></returns> public MegaloScriptVariableReferenceData NewVarReferenceWithIndexData(MegaloScriptVariableReferenceType refKind, string refMemberName, string indexName, string dataTypeName = null) { Contract.Requires(!string.IsNullOrEmpty(refMemberName)); Contract.Requires(indexName != null); MegaloScriptVariableReferenceData result; Proto.MegaloScriptProtoVariableReferenceMember member; MegaloScriptVariableReferenceData.Initialize(this, out result, refKind, out member, refMemberName, dataTypeName); Contract.Assert(member.HasDataValue, "Member has no data field, let alone index data"); result.Data = GetTargetIndexFromName(member.ValueType.IndexTarget, indexName); return(result); }
/// <summary></summary> /// <param name="refKind">The kind of variable we're this reference</param> /// <param name="refMemberName">The variable's reference type</param> /// <param name="enumMemberName">Actual 'data' value for the variable reference</param> /// <param name="dataTypeName">Optional type info for <paramref name="enumMemberName"/></param> /// <returns></returns> public MegaloScriptVariableReferenceData NewVarReferenceWithEnumData(MegaloScriptVariableReferenceType refKind, string refMemberName, string enumMemberName, string dataTypeName = null) { Contract.Requires(!string.IsNullOrEmpty(refMemberName)); Contract.Requires(!string.IsNullOrEmpty(enumMemberName)); MegaloScriptVariableReferenceData result; Proto.MegaloScriptProtoVariableReferenceMember member; MegaloScriptVariableReferenceData.Initialize(this, out result, refKind, out member, refMemberName, dataTypeName); Contract.Assert(member.HasDataValue, "Member has no data field, let alone enum data"); var id_resolving_ctxt = new Proto.MegaloScriptEnum.EnumNameResolvingContext(Database, member.EnumValueType); result.Data = Proto.MegaloScriptEnum.EnumNameResolvingContext.IdResolver(id_resolving_ctxt, enumMemberName); return(result); }