예제 #1
0
        /// <summary>
        /// Creates a simple texture from any base API image.
        /// </summary>
        public static Texture2D CreateFromAPIImage(BaseImageFile image, int record = 0, int frame = 0, int alphaIndex = -1, bool createMipMaps = false, bool makeNoLongerReadable = true)
        {
            // Override readable flag when user has set preference in material reader
            if (DaggerfallUnity.Instance.MaterialReader.ReadableTextures)
            {
                makeNoLongerReadable = false;
            }

            Texture2D texture;

            if (TextureReplacement.TryImportImage(image.FileName, out texture))
            {
                return(texture);
            }

            if (TextureReplacement.TryImportCifRci(image.FileName, record, frame, out texture))
            {
                return(texture);
            }

            DFSize sz;

            Color32[] colors = image.GetColor32(record, frame, alphaIndex, 0, out sz);
            texture = new Texture2D(sz.Width, sz.Height, TextureFormat.RGBA32, createMipMaps);
            texture.SetPixels32(colors);
            texture.Apply(createMipMaps, makeNoLongerReadable);
            return(texture);
        }
예제 #2
0
        public static Texture2D GetTextureFromImg(string name, out DFPosition offset, TextureFormat format = TextureFormat.ARGB32, bool readOnly = true)
        {
            offset = new DFPosition();

            DaggerfallUnity dfUnity = DaggerfallUnity.Instance;

            if (!dfUnity.IsReady)
            {
                return(null);
            }

            ImgFile   imgFile = new ImgFile(Path.Combine(dfUnity.Arena2Path, name), FileUsage.UseMemory, readOnly);
            Texture2D texture;

            if (!TextureReplacement.TryImportImage(name, out texture))
            {
                imgFile.LoadPalette(Path.Combine(dfUnity.Arena2Path, imgFile.PaletteName));
                texture = GetTextureFromImg(imgFile, format, readOnly);
            }

            texture.filterMode = DaggerfallUI.Instance.GlobalFilterMode;
            offset             = imgFile.ImageOffset;

            return(texture);
        }
예제 #3
0
        protected void SetupPathButtons()
        {
            // Paths buttons
            if (!TextureReplacement.TryImportImage(roadsOffName, true, out roadsOffTexture))
            {
                return;
            }
            if (!TextureReplacement.TryImportImage(roadsOnName, true, out roadsOnTexture))
            {
                return;
            }
            if (!TextureReplacement.TryImportImage(tracksOffName, true, out tracksOffTexture))
            {
                return;
            }
            if (!TextureReplacement.TryImportImage(tracksOnName, true, out tracksOnTexture))
            {
                return;
            }

            roadsButton               = new Button();
            roadsButton.Tag           = path_roads;
            roadsButton.Position      = roadsButtonPos;
            roadsButton.Size          = buttonSize; //new Vector2(roadsOnTexture.width, roadsOnTexture.height);
            roadsButton.OnMouseClick += PathTypeButton_OnMouseClick;
            NativePanel.Components.Add(roadsButton);

            tracksButton               = new Button();
            tracksButton.Tag           = path_tracks;
            tracksButton.Position      = tracksButtonPos;
            tracksButton.Size          = buttonSize; //new Vector2(tracksOnTexture.width, tracksOnTexture.height);
            tracksButton.OnMouseClick += PathTypeButton_OnMouseClick;
            NativePanel.Components.Add(tracksButton);
        }
예제 #4
0
 void LoadTextures()
 {
     if (!TextureReplacement.TryImportImage(baseTextureName, true, out baseTexture))
     {
         Debug.LogError("TravelOptions: Unable to load the base UI image.");
     }
 }
        protected override void Setup()
        {
            base.Setup();

            if (TravelOptionsMod.Instance.ShipTravelPortsOnly)
            {
                // Towns filter button
                if (!TextureReplacement.TryImportImage(portsOffName, true, out portsOffTexture))
                {
                    return;
                }
                if (!TextureReplacement.TryImportImage(portsOnName, true, out portsOnTexture))
                {
                    return;
                }

                portsFilterButton                   = new Button();
                portsFilterButton.Position          = portFilterPos;
                portsFilterButton.Size              = new Vector2(portsOffTexture.width, portsOffTexture.height);
                portsFilterButton.BackgroundTexture = portsOffTexture;
                portsFilterButton.OnMouseClick     += PortsFilterButton_OnMouseClick;
                NativePanel.Components.Add(portsFilterButton);
            }

            if (TravelOptionsMod.Instance.RoadsIntegration)
            {
                SetupPathButtons();
                UpdatePathButtons();

                locationDotsPixelBuffer = new Color32[(int)regionTextureOverlayPanelRect.width * (int)regionTextureOverlayPanelRect.height * 25];
                locationDotsTexture     = new Texture2D((int)regionTextureOverlayPanelRect.width * 5, (int)regionTextureOverlayPanelRect.height * 5, TextureFormat.ARGB32, false);
            }
        }
예제 #6
0
 void LoadTextures()
 {
     if (TextureReplacement.TryImportImage(baseTextureName, true, out baseTexture))
     {
         baseSize = new Vector2(baseTexture.width, baseTexture.height);
     }
 }
예제 #7
0
            private Texture2D TryFindTexture(string vanillaName, string postfix)
            {
                //Note removal of IMG. this is to get around a DFU bug
                var newTexture = Path.GetFileNameWithoutExtension(vanillaName) + postfix + Path.GetExtension(vanillaName);

                Debug.Log("Trying to find " + newTexture);

                Texture2D output;

                if (TextureReplacement.TryImportImage(newTexture, false, out output))
                {
                    return(output);
                }
                return(null);
            }
예제 #8
0
        public Button AddCustomButton(int messageBoxButton, string tag, bool defaultButton = false)
        {
            if (!IsSetup)
            {
                Setup();
            }

            // If this is to become default button, first unset any other default buttons
            // Only one button in collection can be default
            if (defaultButton)
            {
                foreach (Button b in buttons)
                {
                    b.DefaultButton = false;
                }
            }

            Texture2D background;// = DaggerfallUI.GetTextureFromCifRci(buttonsFilename, (int)messageBoxButton);

            TextureReplacement.TryImportImage("button" + tag, true, out background);
            //Vector2 size = TextureReplacement.GetSize(background, buttonsFilename, (int)messageBoxButton);
            Vector2 size   = new Vector2(background.width, background.height);
            Button  button = DaggerfallUI.AddButton(Vector2.zero,
                                                    size, buttonPanel);

            button.BackgroundTexture       = background;
            button.BackgroundTextureLayout = BackgroundLayout.StretchToFill;
            button.Tag           = tag;
            button.OnMouseClick += CustomButtonClickHandler;
            button.DefaultButton = defaultButton;
            //button.Hotkey = DaggerfallShortcut.GetBinding(ToShortcutButton(messageBoxButton));
            buttons.Add(button);

            // Once a button has been added the owner is expecting some kind of input from player
            // Don't allow a messagebox with buttons to be cancelled with escape
            AllowCancel = false;
            UpdatePanelSizes();

            return(button);
        }
예제 #9
0
        protected void SetupWaterButtons()
        {
            // Water buttons
            if (!TextureReplacement.TryImportImage(riversOffName, true, out riversOffTexture))
            {
                return;
            }
            if (!TextureReplacement.TryImportImage(riversOnName, true, out riversOnTexture))
            {
                return;
            }
            if (!TextureReplacement.TryImportImage(streamsOffName, true, out streamsOffTexture))
            {
                return;
            }
            if (!TextureReplacement.TryImportImage(streamsOnName, true, out streamsOnTexture))
            {
                return;
            }

            riversButton                 = new Button();
            riversButton.Tag             = path_rivers;
            riversButton.Position        = riversButtonPos;
            riversButton.Size            = buttonSize;
            riversButton.BackgroundColor = Color.white;
            riversButton.OnMouseClick   += PathTypeButton_OnMouseClick;
            NativePanel.Components.Add(riversButton);

            if (TravelOptionsMod.Instance.StreamsToggle)
            {
                streamsButton                 = new Button();
                streamsButton.Tag             = path_streams;
                streamsButton.Position        = streamsButtonPos;
                streamsButton.Size            = streamsSize;
                streamsButton.BackgroundColor = Color.white;
                streamsButton.OnMouseClick   += PathTypeButton_OnMouseClick;
                NativePanel.Components.Add(streamsButton);
            }
        }
예제 #10
0
        // Update player background panel
        void RefreshBackground(PlayerEntity entity)
        {
            if (lastBackgroundName != entity.RaceTemplate.PaperDollBackground)
            {
                Texture2D texture;
                if (TextureReplacement.TryImportImage(entity.RaceTemplate.PaperDollBackground, out texture))
                {
                    // Import custom image. We assume the image provided is already wihout borders
                    backgroundPanel.Size = new Vector2(paperDollWidth, paperDollHeight);
                }
                else
                {
                    // Use vanilla Daggerfall image and remove borders
                    ImageData data = ImageReader.GetImageData(entity.RaceTemplate.PaperDollBackground, 0, 0, false, false);
                    texture = ImageReader.GetSubTexture(data, backgroundSubRect);
                    backgroundPanel.Size = new Vector2(texture.width, texture.height);
                }

                backgroundPanel.BackgroundTexture = texture;
                lastBackgroundName = entity.RaceTemplate.PaperDollBackground;
            }
        }
예제 #11
0
        protected void SetupWaterButtons()
        {
            // Water buttons
            if (!TextureReplacement.TryImportImage(riversOffName, true, out riversOffTexture))
            {
                return;
            }
            if (!TextureReplacement.TryImportImage(riversOnName, true, out riversOnTexture))
            {
                return;
            }
            if (!TextureReplacement.TryImportImage(streamsOffName, true, out streamsOffTexture))
            {
                return;
            }
            if (!TextureReplacement.TryImportImage(streamsOnName, true, out streamsOnTexture))
            {
                return;
            }

            riversButton                 = new Button();
            riversButton.Tag             = BasicRoadsTexturing.rivers;
            riversButton.Position        = riversButtonPos;
            riversButton.Size            = new Vector2(riversOnTexture.width, riversOnTexture.height);
            riversButton.BackgroundColor = Color.white;
            riversButton.OnMouseClick   += PathTypeButton_OnMouseClick;
            NativePanel.Components.Add(riversButton);

            streamsButton                 = new Button();
            streamsButton.Tag             = BasicRoadsTexturing.streams;
            streamsButton.Position        = streamsButtonPos;
            streamsButton.Size            = new Vector2(streamsOnTexture.width, streamsOnTexture.height);
            streamsButton.BackgroundColor = Color.white;
            streamsButton.OnMouseClick   += PathTypeButton_OnMouseClick;
            NativePanel.Components.Add(streamsButton);
        }
        protected override void Setup()
        {
            base.Setup();

            if (TravelOptionsMod.Instance.ShipTravelPortsOnly)
            {
                // Towns filter button
                if (!TextureReplacement.TryImportImage(portsOffName, true, out portsOffTexture))
                {
                    return;
                }
                if (!TextureReplacement.TryImportImage(portsOnName, true, out portsOnTexture))
                {
                    return;
                }

                portsFilterButton                   = new Button();
                portsFilterButton.Position          = portFilterPos;
                portsFilterButton.Size              = new Vector2(portsOffTexture.width, portsOffTexture.height);
                portsFilterButton.BackgroundTexture = portsOffTexture;
                portsFilterButton.OnMouseClick     += PortsFilterButton_OnMouseClick;
                NativePanel.Components.Add(portsFilterButton);
            }
        }