void Monster::updateFollowing() { if (attackedCreature != nullptr) { startFollowing(attackedCreature); } else if (hasMaster()) { startFollowing(_master.get()); } else { stopFollowing(); } }
bool DrawPathTool::mousePressEvent(QMouseEvent* event, MapCoordF map_coord, MapWidget* widget) { cur_map_widget = widget; created_point_at_last_mouse_press = false; if (editingInProgress() && ((event->button() == Qt::RightButton) && !drawOnRightClickEnabled())) { finishDrawing(); return true; } else if (editingInProgress() && ((event->button() == Qt::RightButton && event->buttons() & Qt::LeftButton) || (event->button() == Qt::LeftButton && event->buttons() & Qt::RightButton))) { if (!previous_point_is_curve_point) undoLastPoint(); if (editingInProgress()) finishDrawing(); return true; } else if (isDrawingButton(event->button())) { dragging = false; bool start_appending = false; if (shift_pressed) { SnappingToolHelperSnapInfo snap_info; MapCoord snap_coord = snap_helper->snapToObject(map_coord, widget, &snap_info); click_pos_map = MapCoordF(snap_coord); cur_pos_map = click_pos_map; click_pos = widget->mapToViewport(click_pos_map).toPoint(); // Check for following and appending if (!is_helper_tool) { if (!editingInProgress()) { if (snap_info.type == SnappingToolHelper::ObjectCorners && (snap_info.coord_index == 0 || snap_info.coord_index == snap_info.object->asPath()->getCoordinateCount() - 1) && snap_info.object->getSymbol() == editor->activeSymbol()) { // Appending to another path start_appending = true; startAppending(snap_info); } // Setup angle helper if (snap_helper->snapToDirection(map_coord, widget, angle_helper.data())) picked_angle = true; } else if (editingInProgress() && (snap_info.type == SnappingToolHelper::ObjectCorners || snap_info.type == SnappingToolHelper::ObjectPaths) && snap_info.object->getType() == Object::Path) { // Start following another path startFollowing(snap_info, snap_coord); return true; } } } else if (!editingInProgress() && ctrl_pressed) { // Start picking direction of an existing object picking_angle = true; pickAngle(map_coord, widget); return true; } else { click_pos = event->pos(); click_pos_map = map_coord; cur_pos_map = map_coord; } if (!editingInProgress()) { // Start a new path startDrawing(); angle_helper->setCenter(click_pos_map); updateSnapHelper(); path_has_preview_point = false; previous_point_is_curve_point = false; appending = start_appending; } else { if (!shift_pressed) angle_helper->getConstrainedCursorPosMap(click_pos_map, click_pos_map); cur_pos_map = click_pos_map; } // Set path point auto coord = MapCoord { click_pos_map }; if (draw_dash_points) coord.setDashPoint(true); if (preview_path->getCoordinateCount() > 0 && picked_angle) picked_angle = false; if (previous_point_is_curve_point) { // Do nothing yet, wait until the user drags or releases the mouse button } else if (path_has_preview_point) { preview_path->setCoordinate(preview_path->getCoordinateCount() - 1, coord); updateAngleHelper(); created_point_at_last_mouse_press = true; } else { if (preview_path->getCoordinateCount() == 0 || !preview_path->getCoordinate(preview_path->getCoordinateCount() - 1).isPositionEqualTo(coord)) { preview_path->addCoordinate(coord); updatePreviewPath(); if (!start_appending) updateAngleHelper(); created_point_at_last_mouse_press = true; } } path_has_preview_point = false; create_segment = true; updateDirtyRect(); updateStatusText(); return true; } return false; }