#ifndef MAIN_CODE_H_INCLUDED
#define MAIN_CODE_H_INCLUDED


#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#ifdef TARGET_ANDROID

#include <GLES/gl.h>
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
#endif

#include "boost/shared_ptr.hpp"
#include "boost/thread/thread.hpp"
#include "boost/assign.hpp"
#include "boost/bind.hpp"
#include "boost/asio.hpp"
#include "boost/signal.hpp"

#include "include/Engine.h"

using namespace SE;

class TMyApplication : public TApplication
{
protected:
	
public:
	bool Inited;

	float Velocity;

	TFlexModel FlexModel;

	std::vector<TFlexModel> TubeModelArr;
	std::vector<TVolumeBody> TubeBodyArr;
	//std::list<std::pair<TFlexModel, TVolumeBody>> BoxList;

	vec3 PrevCamVec;
	vec3 RotateAxis;
	//float RotateShift;
	vec2 RotateShift;

	boost::signal<void()> OnUpdateSignal;

	TMyApplication() : TApplication(), Inited(false) { }
	
    virtual void InnerInit();
    
    virtual void InnerDeinit();
	
	virtual void InnerDraw();
	
	virtual void InnerUpdate(cardinal dt);
	 
	bool IsInited() { return Inited; }

	virtual void InnerOnMove(vec2 shift);
	virtual void InnerOnTapUp(vec2 p);
	virtual void InnerOnTapUpAfterMove(vec2 p);

	virtual void OnMouseWheel(short int delta);

	void UpdatePitVector(cardinal dt);

	void RecreateLevel();

};


#endif
