Exemplo n.º 1
0
        public override void OnPopulate()
        {
            VoidPtr dataPtr = dataAddr;
            int     size    = 0;

            for (int i = 0; i < count; i++, dataPtr += size)
            {
                switch (_memberType)
                {
                case hkClassMember.Type.TYPE_STRUCT:
                    new HavokMetaObjectNode(_classNode)
                    .Initialize(this, dataPtr, size = _classNode == null ? 0 : _classNode.Size);
                    break;

                case hkClassMember.Type.TYPE_ENUM:
                case hkClassMember.Type.TYPE_FLAGS:
                    new cmEnumNode()
                    {
                        _enumNode = _enumNode
                    }
                    .Initialize(this, dataPtr, size = (int)_memberFlags & 0x3F);
                    break;

                case hkClassMember.Type.TYPE_ARRAY:
                case hkClassMember.Type.TYPE_HOMOGENEOUSARRAY:
                case hkClassMember.Type.TYPE_INPLACEARRAY:
                case hkClassMember.Type.TYPE_SIMPLEARRAY:
                case hkClassMember.Type.TYPE_FUNCTIONPOINTER:
                case hkClassMember.Type.TYPE_ZERO:
                    Console.WriteLine("This shouldn't happen");
                    break;

                default:
                    ClassMemberInstanceNode instance = HavokMetaObjectNode.TryGetMember(_memberType);
                    if (instance != null)
                    {
                        hkClassMember.Type tempType = _memberType;
                        if (tempType == hkClassMember.Type.TYPE_POINTER)
                        {
                            tempType = hkClassMember.Type.TYPE_STRUCT;     //Pointer to class object
                        }

                        instance._isZero      = false;
                        instance._name        = "Entry" + i;
                        instance._memberType  = tempType;
                        instance._memberFlags = _memberFlags;
                        instance._classNode   = _classNode;
                        instance._enumNode    = _enumNode;

                        instance.Initialize(this, dataPtr, size = instance.GetSize());
                    }

                    break;
                }
            }
        }
Exemplo n.º 2
0
        public override void OnPopulate()
        {
            VoidPtr dataPtr = ((bint *)Data)->OffsetAddress;

            switch (_memberType)
            {
            case hkClassMember.Type.TYPE_STRUCT:
                new HavokMetaObjectNode(_classNode)
                .Initialize(this, dataPtr, _classNode.Size);
                break;

            case hkClassMember.Type.TYPE_ENUM:
            case hkClassMember.Type.TYPE_FLAGS:
                new cmEnumNode
                {
                    _enumNode = _enumNode
                }
                .Initialize(this, dataPtr, (int)_memberFlags & 0x3F);
                break;

            case hkClassMember.Type.TYPE_ARRAY:
            case hkClassMember.Type.TYPE_HOMOGENEOUSARRAY:
            case hkClassMember.Type.TYPE_INPLACEARRAY:
            case hkClassMember.Type.TYPE_SIMPLEARRAY:
            case hkClassMember.Type.TYPE_ZERO:
                Console.WriteLine("This shouldn't happen");
                break;

            default:
                ClassMemberInstanceNode instance = HavokMetaObjectNode.TryGetMember(_memberType);
                if (instance != null)
                {
                    instance._isZero      = false;
                    instance._name        = "";
                    instance._memberType  = _memberType;
                    instance._memberFlags = _memberFlags;
                    instance._classNode   = _classNode;
                    instance._enumNode    = _enumNode;

                    instance.Initialize(this, dataPtr, instance.GetSize());
                }

                break;
            }
        }