wiki:ManualPage

Version 8 (modified by art, 12 years ago) (diff)

--

Note: Documentation is in progress !!!

Manual

On the following pages you can find more information about different parts of the engine. Simple code snippets are also included to give an implementation example

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