public override void OnRebuild(VoidPtr address, int length, bool force) { base.OnRebuild(address, length, force); _matchAddr = null; if (_name == "<null>") { return; } SCN0Fog *header = (SCN0Fog *)address; int flags = 0; for (int i = 0; i < 2; i++) { _dataAddrs[0] += EncodeKeyframes( KeyArrays[i], _dataAddrs[0], header->_start.Address + i * 4, ref flags, (int)SCN0FogFlags.FixedStart + i * 0x20); } _dataAddrs[1] += WriteColors( ref flags, (int)SCN0FogFlags.FixedColor, _solidColor, _colors, _constantColor, FrameCount, header->_color.Address, ref _matchAddr, _match == null ? null : _match._matchAddr, (RGBAPixel *)_dataAddrs[1]); _flags = (SCN0FogFlags)flags; header->_flags = (byte)flags; header->_type = (int)_type; }
public override void OnRebuild(VoidPtr address, int length, bool force) { base.OnRebuild(address, length, force); _matchAddr = null; SCN0Fog *header = (SCN0Fog *)address; flags = SCN0FogFlags.None; if (_colors.Count > 1) { _matchAddr = lightAddr; if (_match == null) { *((bint *)header->_color.Address) = (int)lightAddr - (int)header->_color.Address; for (int i = 0; i <= ((SCN0Node)Parent.Parent).FrameCount; i++) { if (i < _colors.Count) { *lightAddr++ = (RGBAPixel)_colors[i]; } else { *lightAddr++ = new RGBAPixel(); } } } else { *((bint *)header->_color.Address) = (int)_match._matchAddr - (int)header->_color.Address; } } else { flags |= SCN0FogFlags.FixedColor; header->_color = (RGBAPixel)_solidColor; } if (_startKeys._keyCount > 1) { *((bint *)header->_start.Address) = (int)keyframeAddr - (int)header->_start.Address; EncodeFrames(_startKeys, ref keyframeAddr); } else { flags |= SCN0FogFlags.FixedStart; if (_startKeys._keyCount == 1) { header->_start = _startKeys._keyRoot._next._value; } else { header->_start = 0; } } if (_endKeys._keyCount > 1) { *((bint *)header->_end.Address) = (int)keyframeAddr - (int)header->_end.Address; EncodeFrames(_endKeys, ref keyframeAddr); } else { flags |= SCN0FogFlags.FixedEnd; if (_endKeys._keyCount == 1) { header->_end = _endKeys._keyRoot._next._value; } else { header->_end = 0; } } header->_flags = (byte)flags; header->_type = type; }
protected internal override void OnRebuild(VoidPtr address, int length, bool force) { base.OnRebuild(address, length, force); SCN0Fog *header = (SCN0Fog *)address; if (colors.Count > 1) { *((bint *)header->_color.Address) = (int)lightAddr - (int)header->_color.Address; for (int i = 0; i <= ((SCN0Node)Parent.Parent).FrameCount; i++) { if (i < colors.Count) { *lightAddr++ = colors[i]; } else { *lightAddr++ = new RGBAPixel(); } } flags &= ~SCN0FogFlags.FixedColor; } else { flags |= SCN0FogFlags.FixedColor; if (colors.Count == 1) { header->_color = colors[0]; } else { header->_color = new RGBAPixel(); } } if (starts.Count > 1) { *((bint *)header->_start.Address) = (int)keyframeAddr - (int)header->_start.Address; ((SCN0KeyframesHeader *)keyframeAddr)->_numFrames = (ushort)starts.Count; SCN0KeyframeStruct *addr = ((SCN0KeyframesHeader *)keyframeAddr)->Data; for (int i = 0; i < starts.Count; i++) { *addr++ = starts[i]; } keyframeAddr += 4 + starts.Count * 12; flags &= ~SCN0FogFlags.FixedStart; } else { flags |= SCN0FogFlags.FixedStart; if (starts.Count == 1) { header->_start = starts[0]._value; } else { header->_start = 0; } } if (ends.Count > 1) { *((bint *)header->_end.Address) = (int)keyframeAddr - (int)header->_end.Address; ((SCN0KeyframesHeader *)keyframeAddr)->_numFrames = (ushort)ends.Count; SCN0KeyframeStruct *addr = ((SCN0KeyframesHeader *)keyframeAddr)->Data; for (int i = 0; i < ends.Count; i++) { *addr++ = ends[i]; } keyframeAddr += 4 + ends.Count * 12; flags &= ~SCN0FogFlags.FixedEnd; } else { flags |= SCN0FogFlags.FixedEnd; if (ends.Count == 1) { header->_end = ends[0]._value; } else { header->_end = 0; } } header->_flags = (byte)flags; header->_density = density; }