protected internal override void OnRebuild(VoidPtr address, int length, bool force) { int off = 0; foreach (MoveDefEventNode e in Children) { off += e.Children.Count * 8; } FDefEventArgument *paramAddr = (FDefEventArgument *)address; FDefEvent * eventAddr = (FDefEvent *)(address + off); _entryOffset = eventAddr; foreach (MoveDefEventNode e in Children) { if (e._name == "FADEF00D" || e._name == "FADE0D8A") { continue; } e._entryOffset = eventAddr; *eventAddr = new FDefEvent() { _id = e.id, _nameSpace = e.nameSpace, _numArguments = (byte)e.Children.Count, _unk1 = e.unk1 }; if (e.Children.Count > 0) { eventAddr->_argumentOffset = (uint)paramAddr - (uint)_rebuildBase; _lookupOffsets.Add((int)eventAddr->_argumentOffset.Address - (int)_rebuildBase); } else { eventAddr->_argumentOffset = 0; } eventAddr++; foreach (MoveDefEventParameterNode p in e.Children) { p._entryOffset = paramAddr; if (p._type != ArgVarType.Offset) { *paramAddr = new FDefEventArgument() { _type = (int)p._type, _data = p._value } } ; else { Root._postProcessNodes.Add(p); //if ((p as MoveDefEventOffsetNode).action != null) // _lookupOffsets.Add(0); } paramAddr++; } } eventAddr++; //Terminate }
protected override void OnPopulate() { FDefEvent *ev = Header; if (!_isBlank) { while (ev->_nameSpace != 0 || ev->_id != 0) { new MoveDefEventNode().Initialize(this, new DataSource(((VoidPtr)ev++), 8)); } } SetSizeInternal(Children.Count * 8 + 8); }