Esempio n. 1
0
func (s *service) nextFloor(e exploration.Exploration, eventTime time.Time) (exploration.Exploration, error) {
	floorNo := e.NextFloorNo()
	ef := exploration.NewFloor(floorNo, eventTime)
	e.Floors = append(e.Floors, ef)

	p, err := s.playerRepository.Resolve(e.PlayerID)
	if err != nil {
		return e, fmt.Errorf("player error %d: %s", e.PlayerID, err.Error())
	}
	p.AddExp(calcNextFloorExp(floorNo))

	if err := s.playerRepository.Store(p); err != nil {
		return e, fmt.Errorf("player store error %d: %s", e.PlayerID, err.Error())
	}

	// Clear判定
	if dungeon.ResolveDungeon(e.DungeonID).IsClear(e.NowFloorNo()) {
		return s.activeEvent(e, eventTime, event.PlayerClearEvent)
	} else {
		return e, nil
	}
}