Пример #1
0
bool SecondarySkillBar::QueueEventProcessing(void)
{
    Display & display = Display::Get();
    Cursor & cursor = Cursor::Get();
    LocalEvent & le = LocalEvent::Get();
    const Point & cu = le.GetMouseCursor();
    bool modify = false;

    if(!(pos & cu) || !skills) return false;

    u8 ii = GetIndexFromCoord(cu);
    const Sprite & sprite_skill = AGG::GetICN((use_mini_sprite ? ICN::MINISS : ICN::SECSKILL), 0);
    const Rect tile(pos.x + (ii * (sprite_skill.w() + interval)), pos.y, sprite_skill.w(), sprite_skill.h());

    if(ii < skills->size())
    {
	Skill::Secondary & skill = skills->at(ii);

	if(skill.isValid())
	{
	    if(le.MouseClickLeft(tile))
    	    {
        	cursor.Hide();
        	Dialog::SecondarySkillInfo(skill, true);
        	cursor.Show();
        	display.Flip();
	    }
	    else
	    if(le.MousePressRight(tile))
	    {
		if(can_change)
		{
		    skill.Reset();
		    modify = true;
		}
		else
		{
		    cursor.Hide();
		    Dialog::SecondarySkillInfo(skill, false);
		    cursor.Show();
		    display.Flip();
		}
	    }
	}
    }
    else
    if(ii < MAXSECONDARYSKILL)
    {
	if(can_change && le.MouseClickLeft(tile))
	{
	    Skill::Secondary alt = Dialog::SelectSecondarySkill();
	    if(alt.isValid() && skills)
	    {
		skills->AddSkill(alt);
		modify = true;
	    }
	}
    }

    return modify;
}