Показано с 1 по 20 из 70

Тема: Уроки SDK. Поэтапно с начала.

Древовидный режим

  1. #12
    Отошел покопаться в другом направлении, а именно CvRandom::get Внешне непримечательная, но как показывает Very Sleepy, на её внутренние вызовы приходится 25% всей работы. Причем она обращается к .exe файлу, а тот в свою очередь вызывает кучу внешних в том числе и те, что наиболее ресурсоемкие. Вызывается она чаще всего через питон.





    Отвечает она, судя по названию за рандом. Выглядит вот так.

    Скрытый текст
    Код:
    unsigned short CvRandom::get(unsigned short usNum, const TCHAR* pszLog)
    {
    	if (pszLog != NULL)
    	{
    		if (GC.getLogging() && GC.getRandLogging())
    		{
    			if (GC.getGameINLINE().getTurnSlice() > 0)
    			{
    				TCHAR szOut[1024];
    				sprintf(szOut, "Rand = %d on %d (%s)\n", getSeed(), GC.getGameINLINE().getTurnSlice(), pszLog);
    				gDLL->messageControlLog(szOut);
    			}
    		}
    	}
    
    	m_ulRandomSeed = ((RANDOM_A * m_ulRandomSeed) + RANDOM_C);
    
    	unsigned short us = ((unsigned short)((((m_ulRandomSeed >> RANDOM_SHIFT) & MAX_UNSIGNED_SHORT) * ((unsigned long)usNum)) / (MAX_UNSIGNED_SHORT + 1)));
    
    	return us;
    }

    В питон передается, если я правильно понимаю, через функцию в файле CyRandomInterface.cpp
    Содержимое файла выглядит так.

    Скрытый текст
    Код:
    #include "CvGameCoreDLL.h"
    #include "CvRandom.h"
    # include <boost/python/overloads.hpp>
    using namespace boost::python;
    
    BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(CvRandom_get_overloads, CvRandom::get, 2, 2)
    
    //
    // published python interface for CvRandom
    //
    void CyRandomPythonInterface()
    {
    	OutputDebugString("Python Extension Module - CyRandomPythonInterface\n");
    
    	python::class_<CvRandom>("CyRandom")
    		.def("get", &CvRandom::get, CvRandom_get_overloads( args("usNum", "pszLog"), "returns a random number"))
    		.def("init", &CvRandom::init, "void (unsigned long int ulSeed)")
    		;
    }

    P.S.

    Тьфу Все дело было в том, что у меня в CivilizationIV.ini
    Стояла включенной запись случайных чисел в лог. Потому-то так эти функции и тормозили.
    Код:
    ; Enable rand event logging
    RandLog = 1
    Выключил её, игра резко прибавила в шустрости. Я ведь сколько времени то с этой опцией играл. Тьфу на меня.
    Код:
    ; Enable rand event logging
    RandLog = 0
    продвинь это сообщение в соцсеть:  
    Последний раз редактировалось Cansei; 01.09.2013 в 20:53.

Похожие темы

  1. Тайлы с ресами позначены с начала игры?
    от Taras_UA в разделе Civ5 - Игровые вопросы
    Ответов: 1
    Новое: 05.10.2010, 18:18
  2. Тактические уроки двух последних войн Ирака для общевойскового командира
    от Гость в разделе Разговоры обо всём, кроме Цивилизации
    Ответов: 2
    Новое: 18.03.2009, 16:57
  3. Уроки французского
    от BuDDaH в разделе Палаты команды Монархия MTDG2
    Ответов: 5
    Новое: 01.02.2007, 14:21
  4. Уроки C++
    от vpadlo в разделе Civ4 - Модная Цивилизация
    Ответов: 13
    Новое: 21.01.2007, 00:58
  5. Глючит 1.61 рус: с начала игры остается 10 ходов!
    от Mityay в разделе Civ4 - Технические вопросы
    Ответов: 1
    Новое: 17.07.2006, 13:51

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
Рейтинг@Mail.ru

free counters