Example #1
0
        // Add code for each of the fields
        void GenerateFieldImplementation(StringBuilder builder, CodegenClassMember member)
        {
            builder.AppendLine($"        if(fieldHash == {member.FieldHash}) {{");
            if (member.InfoWrapper.IsPublic())
            {
                builder.AppendLine($"            behaviour.{member.FieldName} = value as {member.FieldType};");
            }
            else
            {
                switch (member.InfoWrapper.MemberInfo.MemberType)
                {
                case MemberTypes.Field:
                    builder.AppendLine($"            behaviour.GetType().GetField(\"{ member.FieldName}\", BindingFlags.Instance|BindingFlags.NonPublic).SetValue(behaviour, value); ");
                    break;

                case MemberTypes.Property:
                    builder.AppendLine($"            behaviour.GetType().GetProperty(\"{ member.FieldName}\", BindingFlags.Instance|BindingFlags.NonPublic).SetValue(behaviour, value); ");
                    break;

                default:
                    break;
                }
            }
            builder.AppendLine($"            return;");
            builder.AppendLine("        }");
        }
Example #2
0
        // Given a classHash, collect data required to populate a CodegenClassMember from the FieldInfo
        private void AddMember(int classHash, MemberInfo member)
        {
            // Attempt to resolve the CodegenClass to which this field belongs
            CodegenClass destClass = null;

            foreach (var c in Classes)
            {
                if (c.ClassHash == classHash)
                {
                    destClass = c;
                    break;
                }
            }

            Debug.Assert(destClass != null);

            // Ensure we don't already know about the field
            string fieldName = member.Name;
            int    fieldHash = fieldName.GetHashCode();

            foreach (var f in destClass.Members)
            {
                if (f.FieldHash == fieldHash)
                {
                    Debug.Assert(fieldName.Equals(f.FieldName));
                    return;
                }
            }

            // Create the collection of data we need for the CodegenClassMember instance
            CodegenClassMember newMember = new CodegenClassMember(fieldName, member, fieldHash);

            destClass.Members.Add(newMember);
        }