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;
            }
        }
Ejemplo n.º 2
0
        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);
                }
            });
        }