void Start() { if (gameObject.GetComponent <MeshFilter>() == null) { return; } isInitialize = true; nvFracture = NvFracture.GetNvFractureInstance(); collider = GetComponents <Collider>(); if (outsideMaterial == null) { render = gameObject.GetComponent <MeshRenderer>(); outsideMaterial = render.sharedMaterial; } if (setting == null) { setting = Resources.Load <NvSetting>("NvSetting/NvFractureSetting"); } if (setting != null) { nvFractureRead = setting.ToNvFractureRead(); if (insideMaterial == null) { insideMaterial = setting.insideMaterial; } } if (nvFractureRead.chunkCount == 0) { nvFractureRead = NvFractureRead.GetDefaultFractureRead(); } }
private static int GetConfig(ServiceCtx Context) { if (!IsProductionMode) { long InputPosition = Context.Request.GetBufferType0x21().Position; long OutputPosition = Context.Request.GetBufferType0x22().Position; string Domain = MemoryHelper.ReadAsciiString(Context.Memory, InputPosition + 0, 0x41); string Name = MemoryHelper.ReadAsciiString(Context.Memory, InputPosition + 0x41, 0x41); if (Set.NxSettings.Settings.TryGetValue($"{Domain}!{Name}", out object NvSetting)) { byte[] SettingBuffer = new byte[0x101]; if (NvSetting is string StringValue) { if (StringValue.Length > 0x100) { Logger.PrintError(LogClass.ServiceNv, $"{Domain}!{Name} String value size is too big!"); } else { SettingBuffer = Encoding.ASCII.GetBytes(StringValue + "\0"); } } if (NvSetting is int IntValue) { SettingBuffer = BitConverter.GetBytes(IntValue); } else if (NvSetting is bool BoolValue) { SettingBuffer[0] = BoolValue ? (byte)1 : (byte)0; } else { throw new NotImplementedException(NvSetting.GetType().Name); } Context.Memory.WriteBytes(OutputPosition + 0x82, SettingBuffer); Logger.PrintDebug(LogClass.ServiceNv, $"Got setting {Domain}!{Name}"); } return(NvResult.Success); } return(NvResult.NotAvailableInProduction); }