add dialogs

This commit is contained in:
Владимир Фёдоров 2026-03-07 20:13:07 +07:00
parent 856f12f2e3
commit edd3db35ae
3 changed files with 181 additions and 2 deletions

View File

@ -3,6 +3,7 @@
"ввода",
"внимательно",
"Детективы",
"диалога",
"диалогом",
"корректный",
"Можно",
@ -14,10 +15,12 @@
"открытую",
"открыть",
"получение",
"после",
"правила",
"Приложение",
"приложением",
"проходами",
"проходом",
"скрытой",
"скрытую",
"существует",

View File

@ -79,7 +79,7 @@ func (s *StoryService) GetPlace(code string) *models.Place {
func (s *StoryService) GetPlaces(codes []string) []*models.Place {
places := make([]*models.Place, 0, 100)
m := map[string]any{}
for _, code := range codes {
for i, code := range codes {
place := s.GetPlace(code)
_, ok := m[place.Code]
if place.Hidden && !ok {
@ -89,6 +89,17 @@ func (s *StoryService) GetPlaces(codes []string) []*models.Place {
for _, door := range place.Doors {
m[door.Code] = struct{}{}
}
if i > 0 {
for j := range places[i-1].Doors {
if places[i-1].Doors[j].Code != place.Code {
if places[i-1].Doors[j].Show {
places[i-1].Doors[j].Show = false
delete(m, places[i-1].Doors[j].Code)
}
}
}
}
}
return places
}

View File

@ -203,6 +203,7 @@ func TestStoryService_GetPlaces(t *testing.T) {
"Текст",
models.WithPlaceDoors(
models.NewDoor("Ы-2", "Название"),
models.NewDoor("Ы-3", "Название"),
),
),
models.NewPlace(
@ -211,9 +212,15 @@ func TestStoryService_GetPlaces(t *testing.T) {
"Текст",
models.WithPlaceHidden(true),
),
models.NewPlace(
"Ы-3",
"Название",
"Текст",
models.WithPlaceHidden(true),
),
},
},
codes: []string{"Ы-1", "Ы-2"},
codes: []string{"Ы-1", "Ы-2", "Ы-3"},
want: []*models.Place{
models.NewPlace(
"Ы-1",
@ -221,6 +228,7 @@ func TestStoryService_GetPlaces(t *testing.T) {
"Текст",
models.WithPlaceDoors(
models.NewDoor("Ы-2", "Название"),
models.NewDoor("Ы-3", "Название"),
),
),
models.NewPlace(
@ -229,6 +237,163 @@ func TestStoryService_GetPlaces(t *testing.T) {
"Текст",
models.WithPlaceHidden(true),
),
models.NewPlace(
"Ы-3",
"Название",
"Текст",
models.WithPlaceHidden(true),
),
},
},
{
name: "Открываем скрытую точку диалога",
story: &models.Story{
Places: []*models.Place{
models.NewPlace(
"Ы-1",
"Название",
"Текст",
models.WithPlaceDoors(
models.NewDoor("Ы-2", "Название", models.WithDoorShow(true)),
),
),
models.NewPlace(
"Ы-2",
"Название",
"Текст",
models.WithPlaceHidden(true),
),
models.NewPlace(
"Ы-3",
"Название",
"Текст",
),
},
},
codes: []string{"Ы-1", "Ы-3", "Ы-2"},
want: []*models.Place{
models.NewPlace(
"Ы-1",
"Название",
"Текст",
models.WithPlaceDoors(
models.NewDoor("Ы-2", "Название", models.WithDoorShow(false)),
),
),
models.NewPlace(
"Ы-3",
"Название",
"Текст",
),
models.NewNotFoundPlace("Ы-2"),
},
},
{
name: "Открываем скрытую точку диалога",
story: &models.Story{
Places: []*models.Place{
models.NewPlace(
"Ы-1",
"Название",
"Текст",
models.WithPlaceDoors(
models.NewDoor("Ы-2", "Название", models.WithDoorShow(true)),
models.NewDoor("Ы-3", "Название", models.WithDoorShow(true)),
),
),
models.NewPlace(
"Ы-2",
"Название",
"Текст",
models.WithPlaceHidden(true),
),
models.NewPlace(
"Ы-3",
"Название",
"Текст",
models.WithPlaceHidden(true),
),
},
},
codes: []string{"Ы-1", "Ы-2", "Ы-3"},
want: []*models.Place{
models.NewPlace(
"Ы-1",
"Название",
"Текст",
models.WithPlaceDoors(
models.NewDoor("Ы-2", "Название", models.WithDoorShow(true)),
models.NewDoor("Ы-3", "Название", models.WithDoorShow(false)),
),
),
models.NewPlace(
"Ы-2",
"Название",
"Текст",
models.WithPlaceHidden(true),
),
models.NewNotFoundPlace("Ы-3"),
},
},
{
name: "Открываем скрытую точку после диалога",
story: &models.Story{
Places: []*models.Place{
models.NewPlace(
"Ы-1",
"Название",
"Текст",
models.WithPlaceDoors(
models.NewDoor("Ы-2", "Название", models.WithDoorShow(true)),
models.NewDoor("Ы-3", "Название", models.WithDoorShow(true)),
models.NewDoor("Ы-4", "Название"),
),
),
models.NewPlace(
"Ы-2",
"Название",
"Текст",
models.WithPlaceHidden(true),
),
models.NewPlace(
"Ы-3",
"Название",
"Текст",
models.WithPlaceHidden(true),
),
models.NewPlace(
"Ы-4",
"Название",
"Текст",
models.WithPlaceHidden(true),
),
},
},
codes: []string{"Ы-1", "Ы-2", "Ы-3", "Ы-4"},
want: []*models.Place{
models.NewPlace(
"Ы-1",
"Название",
"Текст",
models.WithPlaceDoors(
models.NewDoor("Ы-2", "Название", models.WithDoorShow(true)),
models.NewDoor("Ы-3", "Название", models.WithDoorShow(false)),
models.NewDoor("Ы-4", "Название"),
),
),
models.NewPlace(
"Ы-2",
"Название",
"Текст",
models.WithPlaceHidden(true),
),
models.NewNotFoundPlace("Ы-3"),
models.NewPlace(
"Ы-4",
"Название",
"Текст",
models.WithPlaceHidden(true),
),
},
},
}