wiki:ManualPage

Version 7 (modified by art, 17 years ago) (diff)

--

Note: Documentation is in progress !!!

Getting started

A following code snippet shows you how to start working with the engine. It will initialize the engine singleton and setup basic logging capabilities.

#include <nrEngine/nrEngine.h>

void main()
{
    // initialize logging
    Engine::instance()->initializeLog("log/");
    Engine::sLog()->setLevel(Log::LL_WARNING);

    // initialize essential parts of the engine
    Engine::instance()->initializeEngine();


    ....


    // release the engine and free memory
    Engine::release();
}

Note: You do not have to initialize logging at all. However this helps to determine errors and to debug the engine integration into your application. I would suggest to enable logging during the development of your software (e.g. with level=LL_DEBUG) and to disable it in the release version.

How to use Kernel/Task? subsystem

Most of the games has got a main-loop. During the execution of one cycle of the loop a game engine has to perfrom a lot of tasks, e.g. checking user input, rendering, physic update and so on.
nrEngine's Kernel/Task? subsystems provides a simple but powerfull interface to manage the main loop. The engine does contains a Kernel which runs in the background of the engine. A Task can be bound to the kernel, so that it gets updated every cycle. A task can be any user derived class which has to perform repetitive jobs, e.g. check for user input or stream data from the disk.
Moreover a task can get a specific order number or it can depend on another task. Hence the engine does provide a simple graph based task execution system. The functionality of the nrEngine's kernel is similar to the operating system's one, but in a very simple form.
And finally a task can be shifted to a thread, so that it executes in parallel to the main application.

The following code show you how to use the engine's kernel subsystem for a simple managment of tasks in your application/game:

#include <nrEngine/nrEngine.h>

using namespace nrEngine;

//! This is a simpel task performing sound output
class SoundTask :  public ITask
{	
public: 
  
	SoundTask();
	~SoundTask();

        //! This method will be called when the task stops				
	Result stopTask();	
	
	//! Task was added to the kernel, so initilize it
	Result onAddTask();
	
	//! This is called every cycle, so that SoundTask can react on it
	Result updateTask();

        ...
};

void main()
{
        // Initialize engine
        ...


        // Add the sound task to the kernel with a low order number
        Engine::sKernel()->AddTask(new SoundTask(), ORDER_LOW);

        // Executes engine's kernel, hence execute all tasks which are in the kernel
        // The function returns if there are no more tasks in the kernel (i.e. if all tasks stops)
        Engine::sKernel()->Execute();
}

Script or not to script