private void Start() { killButtonManager = UnityEngine.Object.Instantiate(hudManager.KillButton, hudManager.transform); startColorButton = killButtonManager.renderer.color; startColorText = killButtonManager.TimerText.Color; killButtonManager.gameObject.SetActive(true); killButtonManager.renderer.enabled = true; Texture2D tex = GUIExtensions.CreateEmptyTexture(); Assembly assembly = Assembly.GetExecutingAssembly(); Stream myStream = assembly.GetManifestResourceStream(ResourceName); byte[] buttonTexture = Reactor.Extensions.Extensions.ReadFully(myStream); ImageConversion.LoadImage(tex, buttonTexture, false); killButtonManager.renderer.sprite = GUIExtensions.CreateSprite(tex); PassiveButton button = killButtonManager.GetComponent <PassiveButton>(); button.OnClick.RemoveAllListeners(); button.OnClick.AddListener((UnityEngine.Events.UnityAction)listener); void listener() { if (Timer < 0f && canUse) { killButtonManager.renderer.color = new Color(1f, 1f, 1f, 0.3f); if (hasEffectDuration) { isEffectActive = true; Timer = EffectDuration; killButtonManager.TimerText.Color = new Color(0, 255, 0); } OnClick(); } } }
/// <summary> /// Call in HudManager.Start /// </summary> private CooldownButton(Assembly asm, Action onClick, float cooldown, string embeddedResourcePath /*, float pixelsPerUnit*/, Vector2 positionOffset, ButtonCategory category, HudManager hudManager, bool hasEffectDuration, float effectDuration, Action onEffectEnd) { OnEffectEnd = onEffectEnd; PositionOffset = positionOffset; EffectDuration = effectDuration; Category = category; //PixelsPerUnit = pixelsPerUnit; MaxTimer = cooldown; Timer = MaxTimer; Buttons.Add(this); string embeddedResourceFullPath = asm.GetManifestResourceNames().FirstOrDefault(resourceName => resourceName.EndsWith(embeddedResourcePath, StringComparison.Ordinal)); if (string.IsNullOrEmpty(embeddedResourceFullPath)) { throw new ArgumentNullException(nameof(embeddedResourcePath), $"The embedded resource \"{embeddedResourcePath}\" was not found in assembly \"{asm.GetName().Name}\"."); } Stream resourceStream = asm.GetManifestResourceStream(embeddedResourceFullPath); KillButtonManager = Object.Instantiate(hudManager.KillButton, hudManager.transform); //StartColorButton = killButtonManager.renderer.color; StartColorText = KillButtonManager.TimerText.Color; KillButtonManager.gameObject.SetActive(true); KillButtonManager.renderer.enabled = true; Texture2D tex = GUIExtensions.CreateEmptyTexture(); byte[] buttonTexture = Reactor.Extensions.Extensions.ReadFully(resourceStream); ImageConversion.LoadImage(tex, buttonTexture, false); KillButtonManager.renderer.sprite = GUIExtensions.CreateSprite(tex); PassiveButton button = KillButtonManager.GetComponent <PassiveButton>(); button.OnClick.RemoveAllListeners(); button.OnClick.AddListener(new Action(() => { if (Timer < 0f && CanUse) { KillButtonManager.renderer.color = new Color(1f, 1f, 1f, 0.3f); if (hasEffectDuration) { IsEffectActive = true; Timer = EffectDuration; KillButtonManager.TimerText.Color = new Color(0, 255, 0); } onClick(); } })); }
/// <summary> /// Creates an instance of <see cref="KillButtonManager"/> when one does not exist. /// </summary> private void CreateButton() { if (KillButtonManager != null || !HudManager.Instance?.KillButton || ImageData == null) { return; } KillButtonManager = Object.Instantiate(HudManager.Instance.KillButton, HudManager.Instance.transform); KillButtonManager.gameObject.SetActive(HudVisible && Visible); KillButtonManager.renderer.enabled = HudVisible && Visible; Texture2D tex = GUIExtensions.CreateEmptyTexture(); ImageConversion.LoadImage(tex, ImageData, false); KillButtonManager.renderer.sprite = GUIExtensions.CreateSprite(tex); PassiveButton button = KillButtonManager.GetComponent <PassiveButton>(); button.OnClick.RemoveAllListeners(); button.OnClick.AddListener(new Action(() => { if (!IsUsable) { return; } CancelEventArgs args = new CancelEventArgs(); OnClick?.SafeInvoke(this, args); if (args.Cancel) { return; // Click was cancelled. } if (HasEffect) { StartEffect(); return; } ApplyCooldown(); })); }