private void Update() { if (_bytesToLoad != null) { try { var tex = Util.TextureFromBytes(_bytesToLoad, TextureFormat.ARGB32); var recommendedSize = GetRecommendedTexSize(_typeToLoad); if (tex.width != tex.height || tex.height != recommendedSize) { Logger.Log(LogLevel.Message | LogLevel.Warning, $"[KSOX] WARNING - Unusual texture resolution! It's recommended to use {recommendedSize}x{recommendedSize} for {_typeToLoad}."); } else { Logger.Log(LogLevel.Message, "[KSOX] Texture imported successfully"); } SetTexAndUpdate(tex.EncodeToPNG(), _typeToLoad); } catch (Exception ex) { _lastError = ex; } _bytesToLoad = null; } if (_lastError != null) { Logger.Log(LogLevel.Error | LogLevel.Message, "[KSOX] Failed to load texture from file - " + _lastError.Message); Logger.Log(LogLevel.Debug, _lastError); _lastError = null; } }
private static void OverlayBlit(Texture source, RenderTexture dest, Material mat, int pass, CustomTextureCreate instance) { if (!instance.CreateInitEnd) { return; } if (source == null) { Logger.Log(LogLevel.Error, instance.trfParent.name + " source texture is null, can't apply overlays!"); return; } if (dest == null) { throw new System.ArgumentNullException(nameof(dest)); } if (mat == null) { throw new System.ArgumentNullException(nameof(mat)); } var overlay = instance.trfParent?.GetComponent <KoiSkinOverlayController>(); if (overlay != null) { if (overlay.ChaControl.customTexCtrlFace == instance) { OverlayBlitImpl(source, dest, mat, pass, overlay, TexType.FaceUnder); overlay.ApplyOverlayToRT(dest, TexType.FaceOver); return; } if (overlay.ChaControl.customTexCtrlBody == instance) { OverlayBlitImpl(source, dest, mat, pass, overlay, TexType.BodyUnder); overlay.ApplyOverlayToRT(dest, TexType.BodyOver); return; } if (overlay.ChaControl.ctCreateEyeL == instance || overlay.ChaControl.ctCreateEyeR == instance) { OverlayBlitImpl(source, dest, mat, pass, overlay, TexType.EyeUnder); overlay.ApplyOverlayToRT(dest, TexType.EyeOver); return; } } // Fall back to original code Graphics.Blit(source, dest, mat, pass); }
private void SetupTexControls(RegisterCustomControlsEvent e, MakerCategory makerCategory, BaseUnityPlugin owner, TexType texType, string title) { e.AddControl(new MakerText(title, makerCategory, owner)); var bi = e.AddControl(new MakerImage(null, makerCategory, owner) { Height = 150, Width = 150 }); _textureChanged.Subscribe( d => { if (d.Key == texType) { bi.Texture = d.Value; } }); e.AddControl(new MakerButton("Load new texture", makerCategory, owner)) .OnClick.AddListener( () => OpenFileDialog.Show(strings => OnFileAccept(strings, texType), "Open overlay image", GetDefaultLoadDir(), FileFilter, FileExt)); e.AddControl(new MakerButton("Clear texture", makerCategory, owner)) .OnClick.AddListener(() => SetTexAndUpdate(null, texType)); e.AddControl(new MakerButton("Export current texture", makerCategory, owner)) .OnClick.AddListener( () => { try { var ctrl = GetOverlayController(); var tex = ctrl.Overlays.FirstOrDefault(x => x.Key == texType).Value; if (tex == null) { return; } WriteAndOpenPng(tex.Data); } catch (Exception ex) { Logger.Log(LogLevel.Error | LogLevel.Message, "[KSOX] Failed to export texture - " + ex.Message); } }); }