public void ApplyVIS(VIS0Node _vis0, int _animFrame) { foreach (string n in VIS0Indices.Keys) { VIS0EntryNode node = null; List<int> indices = VIS0Indices[n]; for (int i = 0; i < indices.Count; i++) if ((node = (VIS0EntryNode)_vis0.FindChild(((MDL0ObjectNode)_objList[indices[i]])._bone.Name, true)) != null) if (node._entryCount != 0 && _animFrame != 0) ((MDL0ObjectNode)_objList[indices[i]])._render = node.GetEntry(_animFrame - 1); else ((MDL0ObjectNode)_objList[indices[i]])._render = node._flags.HasFlag(VIS0Flags.Enabled); } }
/// <summary> /// Adds an animation to the end of this one /// </summary> public void Append(VIS0Node external) { int origIntCount = FrameCount; FrameCount += external.FrameCount; foreach (VIS0EntryNode _extEntry in external.Children) { VIS0EntryNode _intEntry = null; if ((_intEntry = (VIS0EntryNode)FindChild(_extEntry.Name, false)) == null) { VIS0EntryNode newIntEntry = new VIS0EntryNode() { Name = _extEntry.Name }; newIntEntry._entryCount = -1; newIntEntry.EntryCount = _extEntry.EntryCount + origIntCount; newIntEntry._flags = 0; if (_extEntry.Constant) { if (_extEntry.Enabled) for (int i = origIntCount.Align(8) / 8; i < newIntEntry.EntryCount; i++) newIntEntry._data[i] = 0xFF; } else Array.Copy(_extEntry._data, 0, newIntEntry._data, origIntCount.Align(8) / 8, _extEntry.EntryCount.Align(8) / 8); AddChild(newIntEntry); } else { if (!_extEntry.Constant && !_intEntry.Constant) Array.Copy(_extEntry._data, 0, _intEntry._data, origIntCount.Align(8) / 8, _extEntry.EntryCount.Align(8) / 8); else { byte[] d = new byte[_extEntry._data.Length]; if (_intEntry.Constant) { if (_intEntry.Enabled) for (int i = 0; i < origIntCount.Align(8) / 8; i++) d[i] = 0xFF; } else Array.Copy(_extEntry._data, 0, _intEntry._data, origIntCount.Align(8) / 8, _extEntry.EntryCount.Align(8) / 8); _intEntry.Constant = false; if (_extEntry.Constant) { if (_extEntry.Enabled) for (int i = origIntCount.Align(8) / 8; i < _intEntry.EntryCount; i++) d[i] = 0xFF; } else Array.Copy(_extEntry._data, 0, d, origIntCount.Align(8) / 8, _extEntry.EntryCount.Align(8) / 8); _intEntry._data = d; } } } }