Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / roomUI / RoomUIPanel.cs

using Godot;
using UI.BottomTips;

namespace UI.RoomUI;

/// <summary>
/// 地牢房间中的ui
/// </summary>
public partial class RoomUIPanel : RoomUI
{
    private ReloadBar _reloadBar;
    private InteractiveTipBar _interactiveTipBar;
    private WeaponBar _weaponBar;
    private ActivePropBar _activePropBar;
    private LifeBar _lifeBar;
    
    private EventFactory _factory;

    public override void OnCreateUi()
    {
        _reloadBar = new ReloadBar(L_ReloadBar);
        _interactiveTipBar = new InteractiveTipBar(L_InteractiveTipBar);
        _weaponBar = new WeaponBar(L_Control.L_WeaponBar);
        _activePropBar = new ActivePropBar(L_Control.L_ActivePropBar);
        _lifeBar = new LifeBar(L_Control.L_LifeBar);
    }

    public override void OnShowUi()
    {
        _reloadBar.OnShow();
        _interactiveTipBar.OnShow();
        _weaponBar.OnShow();
        _activePropBar.OnShow();
        _lifeBar.OnShow();

        _factory = EventManager.CreateEventFactory();
        _factory.AddEventListener(EventEnum.OnPlayerPickUpProp, OnPlayerPickUpProp);
    }

    public override void OnHideUi()
    {
        _reloadBar.OnHide();
        _interactiveTipBar.OnHide();
        _weaponBar.OnHide();
        _activePropBar.OnHide();
        _lifeBar.OnHide();
        
        _factory.RemoveAllEventListener();
        _factory = null;
    }

    public override void Process(float delta)
    {
        _weaponBar.Process(delta);
        _activePropBar.Process(delta);
        _lifeBar.Process(delta);
        
        QueueRedraw();
    }

    //玩家拾起道具, 弹出提示
    private void OnPlayerPickUpProp(object propObj)
    {
        var prop = (Prop)propObj;
        var message = $"{prop.ActivityBase.Name}\n{prop.ActivityBase.Intro}";
        BottomTipsPanel.ShowTips(prop.GetDefaultTexture(), message);
    }

    public override void _Draw()
    {
        foreach (var role in World.Current.Enemy_InstanceList)
        {
            if (!role.IsDestroyed)
            {
                var position = GameApplication.Instance.ViewToGlobalPosition(role.Position);
                DrawString(ResourceManager.DefaultFont16Px, position, role.StateController.CurrState.ToString());
            }
        }
    }
}