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

View File

@ -203,6 +203,7 @@ func TestStoryService_GetPlaces(t *testing.T) {
"Текст", "Текст",
models.WithPlaceDoors( models.WithPlaceDoors(
models.NewDoor("Ы-2", "Название"), models.NewDoor("Ы-2", "Название"),
models.NewDoor("Ы-3", "Название"),
), ),
), ),
models.NewPlace( models.NewPlace(
@ -211,9 +212,15 @@ func TestStoryService_GetPlaces(t *testing.T) {
"Текст", "Текст",
models.WithPlaceHidden(true), models.WithPlaceHidden(true),
), ),
models.NewPlace(
"Ы-3",
"Название",
"Текст",
models.WithPlaceHidden(true),
),
}, },
}, },
codes: []string{"Ы-1", "Ы-2"}, codes: []string{"Ы-1", "Ы-2", "Ы-3"},
want: []*models.Place{ want: []*models.Place{
models.NewPlace( models.NewPlace(
"Ы-1", "Ы-1",
@ -221,6 +228,7 @@ func TestStoryService_GetPlaces(t *testing.T) {
"Текст", "Текст",
models.WithPlaceDoors( models.WithPlaceDoors(
models.NewDoor("Ы-2", "Название"), models.NewDoor("Ы-2", "Название"),
models.NewDoor("Ы-3", "Название"),
), ),
), ),
models.NewPlace( models.NewPlace(
@ -229,6 +237,163 @@ func TestStoryService_GetPlaces(t *testing.T) {
"Текст", "Текст",
models.WithPlaceHidden(true), 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),
),
}, },
}, },
} }