class UIPropertyAttachment { private Widget m_WgtRoot; private Widget m_WgtThis; private XComboBoxWidget m_WgtComboBox; private TextWidget m_WgtSlotName; private ref TStringArray m_ComboItems; private int m_PrevIndex; private EntityAI m_Obj; private int m_SlotID; void UIPropertyAttachment(Widget root) { m_WgtRoot = root; m_ComboItems = new TStringArray; m_WgtThis = GetGame().GetWorkspace().CreateWidgets("gui/layouts/scene_editor/day_z_scene_editor_attachment.layout", m_WgtRoot); m_WgtComboBox = XComboBoxWidget.Cast( m_WgtThis.FindAnyWidget("combo_box") ); m_WgtSlotName = TextWidget.Cast( m_WgtThis.FindAnyWidget("txt_slot_name") ); } void ~UIPropertyAttachment() { m_WgtRoot = NULL; m_WgtComboBox = NULL; delete m_WgtThis; } bool OnClick(Widget w, int x, int y, int button) { if ( w == m_WgtComboBox ) { if ( m_PrevIndex != 0 ) { EntityAI attachment = m_Obj.GetInventory().FindAttachment(m_SlotID); GetGame().ObjectDelete(attachment); } int curr_index = m_WgtComboBox.GetCurrentItem(); if ( curr_index != 0 ) { PluginDeveloper module_dev = PluginDeveloper.Cast( GetPlugin(PluginDeveloper) ); EntityAI e = module_dev.SpawnEntityAsAttachment(PluginSceneManager.PLAYER, m_Obj, m_ComboItems.Get(curr_index), 1, -1); } m_PrevIndex = curr_index; return true; } return false; } void SetPos(float x, float y) { m_WgtThis.SetPos(x, y); } void SetSize(float width, float height) { m_WgtThis.SetSize(width, height); } void Show(EntityAI e, string slot_name, TStringArray att_items) { m_WgtThis.Show(true); m_Obj = e; m_ComboItems.Clear(); m_ComboItems.Insert("none"); m_ComboItems.InsertAll(att_items); m_WgtSlotName.SetText(slot_name); m_WgtComboBox.ClearAll(); m_SlotID = InventorySlots.GetSlotIdFromString(slot_name); EntityAI attachment = e.GetInventory().FindAttachment(m_SlotID); int selected_index = 0; for ( int i = 0; i < m_ComboItems.Count(); ++i ) { string item_name = m_ComboItems.Get(i); m_WgtComboBox.AddItem(item_name); if ( attachment != NULL && attachment.GetType() == item_name ) { selected_index = i; } } m_WgtComboBox.SetCurrentItem(selected_index); m_PrevIndex = selected_index; } void Hide() { m_WgtThis.Show(false); m_Obj = NULL; m_SlotID = -1; } bool IsVisible() { return m_WgtThis.IsVisible(); } }