コード例 #1
0
void slot_button::update_rc(const logic_gui_context& context, const this_in_container& this_id) {
	const auto& step = context.get_step();
	const auto& cosmos = step.get_cosmos();

	const auto slot_id = cosmos[this_id.get_location().slot_id];

	if (slot_id->always_allow_exactly_one_item) {
		this_id->set_flag(augs::gui::flag::ENABLE_DRAWING);

		if (slot_id.has_items()) {
			const_dereferenced_location<item_button_in_item> child_item_button = context.dereference_location(item_button_in_item{ slot_id.get_items_inside()[0].get_id() });

			if (child_item_button->is_being_wholely_dragged_or_pending_finish(context, child_item_button)) {
				this_id->set_flag(augs::gui::flag::ENABLE_DRAWING);
			}
			else {
				this_id->unset_flag(augs::gui::flag::ENABLE_DRAWING);
			}
		}
	}

	this_id->slot_relative_pos = griddify(this_id->slot_relative_pos);
	this_id->user_drag_offset = griddify(this_id->user_drag_offset);

	vec2i absolute_pos = this_id->slot_relative_pos + this_id->user_drag_offset;

	if (context.get_rect_world().is_currently_dragging(this_id)) {
		absolute_pos += griddify(context.get_rect_world().current_drag_amount);
	}

	this_id->rc.set_position(absolute_pos);
}
コード例 #2
0
ファイル: item_button.cpp プロジェクト: envamp/Augmentations
void item_button::draw_complete_dragged_ghost(draw_info in) {
	auto parent_slot = item->get<components::item>().current_slot;

	auto prev_abs = absolute_xy;
	absolute_xy += in.owner.current_drag_amount;

	draw_dragged_ghost_inside(in);

	absolute_xy = prev_abs + griddify(in.owner.current_drag_amount);
}
コード例 #3
0
void slot_button::advance_elements(const logic_gui_context& context, const this_in_container& this_id, const gui_entropy& entropies, const augs::delta dt) {
	game_gui_rect_node::advance_elements(context, this_id, entropies, dt);
	
	for (const auto& info : entropies.get_events_for(this_id)) {
		this_id->detector.update_appearance(info);

		if (info == gui_event::lfinisheddrag) {
			this_id->user_drag_offset += griddify(info.total_dragged_amount);
		}
	}
}
コード例 #4
0
ファイル: item_button.cpp プロジェクト: envamp/Augmentations
void item_button::consume_gui_event(event_info info) {
	if (is_inventory_root())
		return;

	detector.update_appearance(info);
	auto parent_slot = item->get<components::item>().current_slot;

	if (info == rect::gui_event::ldrag) {
		if (!started_drag) {
			started_drag = true;

			if (parent_slot->is_attachment_slot)
				if (get_meta(parent_slot).get_rect_absolute().hover(info.owner.state.mouse.pos)) {
					get_meta(parent_slot).houted_after_drag_started = false;
				}
		}
	}

	if (info == rect::gui_event::rclick) {
		is_container_open = !is_container_open;
	}

	if (info == rect::gui_event::lfinisheddrag) {
		started_drag = false;

		auto& gui = gui_element_entity->get_owner_world().get_system<gui_system>();
		auto& drag_result = gui.prepare_drag_and_drop_result();

		if (drag_result.possible_target_hovered && drag_result.will_drop_be_successful()) {
			gui.parent_world.post_message(drag_result.intent);
		}
		else if (!drag_result.possible_target_hovered) {
			vec2i griddified = griddify(info.owner.current_drag_amount);

			if (parent_slot->is_attachment_slot) {
				get_meta(parent_slot).user_drag_offset += griddified;
				get_meta(parent_slot).houted_after_drag_started = true;
			}
			else {
				drag_offset_in_item_deposit += griddified;
			}
		}
	}

	// if(being_dragged && inf == rect::gui_event::lup)
}