Esempio n. 1
0
func (s *service) activeEvent(e exploration.Exploration, eventTime time.Time, evs ...event.Event) (exploration.Exploration, error) {
	if len(evs) == 0 {
		return e, nil
	}

	if ok, err := e.IsActive(); err != nil {
		return e, err
	} else if !ok {
		return e, nil
	}

	for _, ev := range evs {
		e.NowFloor().AddProgress(ev)
		e.NowFloor().AddEvent(ev, eventTime)

		switch {
		case ev.IsEnemyEncounter():
			e.EnemyEncounter = battle.New(s.enemyFactory.CreateEnemy(character.EnemyIdentifier(ev.SubID), ev.Num))
		case ev.IsPlayerDownEnd():
			e.DownEnd(eventTime)
		case ev.IsPlayerEscapeEnd():
			e.EscapeEnd(eventTime)
		case ev.IsPlayerClearEnd():
			e.ClearEnd(eventTime)
		}
	}

	return e, nil
}