Тема: Exotic Engine
Показать сообщение отдельно
Старый 29.03.2010, 17:28   #99
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: HxEngine

Немного перековырял архитектуру.
Добавил потдержку OpenGL 3.2,теперь матереалы абстрактны,тоесть пишем свой тип матереала для конретных задач и в файле указываем в качестве имя класса матереала,свой:
<Material>
 <Class name="StandartMaterial"/>
 <DiffuseTexture file="color_map.dds"/>
 <Color r="1.0" g="1.0" b="1.0" a="1.0"/>
<Material/>
Также добавлен единый конфигурационый файл:
<Video>
  <Width value="1024"/>
  <Height value="768"/>
  <FullScreen value="0"/>
  <MSAA value="None"/>
</Video>

<Texture>
  <Filter mode="Linear"/>
  <Anistropy level="0.0"/>
  <MipStart level="0"/>
</Texture>

<Gui>
  <Resource file="core.xml"/>
</Gui>

<Game>
  <Title name="Squad Engine"/>
</Game>
Преписан ресурсный менеджер который с лёгкостью позволяет грузить ресурсы в отдельном потоке:
	class BackgroundResourceLoader{
	public:
		SINGLETON(BackgroundResourceLoader);

		void add( Resource* resource );

		void flush();
	};
Но можно и грузить ресурс в текущем потоке юзая макрос:
    #define ResourceCache(ResourcePtr,ResourceFile) ResourcePtr->setFileName(ResourceFile); ResourcePtr->load();
Так же интии разделены на два типа просто интития Entity,и RenderableEntity тоесть та которую можно отрисовать.
Теперь и написание приложения немного изменилось,тоесть добавлен абстрактный класс EngineListener,в котором есь виртуальные методы init(),shutdown(),update(),и пару связаных с инпутом.
	class EngineListener : public OIS::MouseListener,public OIS::KeyListener
	{
	public:
	
		EngineListener();
		virtual ~EngineListener();

		virtual void init();
		virtual void shutdown();

		virtual void resize( uint width , uint height );
		virtual void update( uint fps , float deltaTime );

		virtual void minimize();
		virtual void maximize();

	
		virtual bool mouseMoved(const OIS::MouseEvent& _arg);
	    virtual bool mousePressed(const OIS::MouseEvent& _arg, OIS::MouseButtonID _id);
	    virtual bool mouseReleased(const OIS::MouseEvent& _arg, OIS::MouseButtonID _id);
	    virtual bool keyPressed(const OIS::KeyEvent& _arg);
	    virtual bool keyReleased(const OIS::KeyEvent& _arg);
};
Юзается так:
#include "..\Engine\squad.h"


class Game : public Squad::EngineListener{
public:
	bool keyPressed(const OIS::KeyEvent& _arg){
		if( _arg.key == OIS::KC_ESCAPE )
			Squad::Engine::getInstance().exit();

		return Squad::EngineListener::keyPressed(_arg);
	}
};

void main(){
	Squad::Engine* engine = Squad::Engine::getInstancePtr();
	engine->init(new Game,"");
	engine->main();
	engine->shutdown();
}
(Offline)
 
Сообщение было полезно следующим пользователям:
Данил (24.04.2010)