1. C++ / Говнокод #6252

    +171

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    ...
    
    bool GameLocations::checkButtonsEnabled() const
    {
    	GameClassT& gc = GameClass::instance();
    	return
    		!gc.getCurrentLocationPopup() &&
    		!gc.getHud().getCurrentWindowFore() &&
    		!gc.isMenuOpen() &&
    		!gc.isEndOfDay() &&
    		!GameClass::instance().isMouseConsumedThisFrame();
    }
    
    ...
    
    void LocationPopupBase::update(float dt)
    {
    	...
    
    	const bool inputEnabled =
    		m_isActive &&
    		!m_talentUsedWindowActive &&
    		!m_dialogueManager.isVisible() &&
    		!GameClass::instance().getHud().getCurrentWindowBack() &&
    		!GameClass::instance().getHud().getCurrentWindowFore() &&
    		(!m_currentAction ||
    		 ((*m_currentActionPhase == AP_Finalize) && !m_currentAction->m_immediateFinalize)) &&
    		 m_actionSequenceCallbacks.empty();
    
    	setInputEnabled(inputEnabled);
    }
    
    ...

    Вот во что со временем превращаются игровые проекты, в которых нет никакой стейт-машины или хоть какого-нибудь её аналога.

    Это - только вершина айсберга. Разнообразные (старые и новые) баги обработки ввода постоянно появляются из ниоткуда, исчезают в никуда, а фиксить их приходится минимум по пять раз в неделю.

    Запостил: Kirinyale, 06 Апреля 2011

    Комментарии (12) RSS

    • прими соболезнования...
      Ответить
      • да, описание действительно душераздирающее :) иииииии....
        Ответить
    • isMenuOpen?
      isEndOfDay?
      isMouseConsumedThisFrame?
      ...
      || isItJustMeSlowlyGoingInsane?
      Ответить
    • беда не только в отсутствии стейт-машины. Беда в полном отсутствии проектирования. О тестировании я вообще молчу
      Ответить
      • Проектирование, к сожалению, при приёме проекта от заваливших его говнокодеров запретили. Сказали "заказчик хочет видеть частые билды, поэтому переписывать с нуля некогда - переписывай постепенно". В итоге оказалось, что заказчику на самом деле пофиг, а первый "частый" билд отправлялся недели через три, когда менять планы было уже поздно.

        А за этот срок можно было бы, как минимум, поднять нормальную архитектуру на готовых наработках. Проверенных двумя более сложными проектами, не имевшими ни одной серьёзной проблемы со вводом (как и с многим другим) за весь срок разработки...
        Ответить
        • обычная говнопрактика, к сожалению.
          в итоге, когда говнокодеры уже не в силах раскопаться, на проект сажается один из немногих толковых программеров, у которого и без этого два проекта. В результате, он, не жалея жопы, ковыряет проект, постепенно рефакторя, меняет архитектуру на более грамотную.
          Но когда его достают, он не желает больше рвать жопу и поддерживает, минимально расходуясь, уже не делая из бревна конфетку.
          Ответить
    • У меня та же хрень примерно в старом проекте. Только чуть меньше условий.
      Ответить

    Добавить комментарий