Exemple #1
0
void KX_NavMeshObject::ProcessReplica()
{
	KX_GameObject::ProcessReplica();

	BuildNavMesh();
	KX_Scene* scene = KX_GetActiveScene();
	KX_ObstacleSimulation* obssimulation = scene->GetObstacleSimulation();
	if (obssimulation)
		obssimulation->AddObstaclesForNavMesh(this);

}
void KX_NavMeshObject::ProcessReplica()
{
	KX_GameObject::ProcessReplica();
	m_navMesh = NULL;  /* without this, building frees the navmesh we copied from */
	BuildNavMesh();
	KX_Scene* scene = KX_GetActiveScene();
	KX_ObstacleSimulation* obssimulation = scene->GetObstacleSimulation();
	if (obssimulation)
		obssimulation->AddObstaclesForNavMesh(this);

}
	bool NavMesh::onCreate(int a_argc, char* a_argv[]) 
	{
		// initialise the Gizmos helper class
		Gizmos::create();

		// create a world-space matrix for a camera
		m_cameraMatrix = glm::inverse( glm::lookAt(glm::vec3(20,20,0),glm::vec3(0,0,0), glm::vec3(0,1,0)) );

		// create a perspective projection matrix with a 90 degree field-of-view and widescreen aspect ratio
		m_projectionMatrix = glm::perspective(glm::pi<float>() * 0.25f, DEFAULT_SCREENWIDTH/(float)DEFAULT_SCREENHEIGHT, 0.1f, 1000.0f);

		// set the clear colour and enable depth testing and backface culling
		glClearColor(0.25f,0.25f,0.25f,1);
		glEnable(GL_DEPTH_TEST);
		glEnable(GL_CULL_FACE);

		m_sponza = new FBXFile();
		m_sponza->load("../../Build/models/SponzaSimple.fbx", FBXFile::UNITS_CENTIMETER);
		createOpenGLBuffers(m_sponza);

		m_navMesh = new FBXFile();
		m_navMesh->load("../../Build/models/SponzaSimpleNavMesh.fbx", FBXFile::UNITS_CENTIMETER);
		//	createOpenGLBuffers(m_navMesh);

		BuildNavMesh(m_navMesh->getMeshByIndex(0), m_Graph);	


		unsigned int vs = Utility::loadShader("../../Build/shaders/sponza.vert", GL_VERTEX_SHADER);
		unsigned int fs = Utility::loadShader("../../Build/shaders/sponza.frag", GL_FRAGMENT_SHADER);
		m_shader = Utility::createProgram(vs,0,0,0,fs);
		glDeleteShader(vs);
		glDeleteShader(fs);


		count = 0;

		Screen = new ShaderHandle();
		Screen->Load(2, "Screen.vert", "Screen.frag");

		bBlueUp = new Button(glm::vec2(25 , 25), glm::vec2(50));
		bBlueDown = new Button(glm::vec2(25, 100), glm::vec2(50));
		bRedUp = new Button(glm::vec2(100, 25), glm::vec2(50));
		bRedDown = new Button(glm::vec2(100 ,100), glm::vec2(50));

		Behaviour* Seek = new SeekTarget(10,this);
		Behaviour* Rand = new RandomiseTarget(10);
		Behaviour* Within = new WithinRange(0.5f);

		//																			IF	not within range	THEN	seek	ELSE	randomise target
		//																			IF	not attack			THEN	Above

		Sequence* Seq = new Sequence();
		Seq->addchild(Within);
		Seq->addchild(Rand);

		Selector* Root = new Selector();
		Root->addchild(Seq);
		Root->addchild(Seek);

		Agenda = Root;

		RedSize = 3;
		BlueSize = 3;



		Red = new Team();
		Blue = new Team();

		int FlagCount = 3;
		for (int i=0;i<FlagCount;i++)
		{
			Flags.emplace_back(new Flag());

		}
		Flags[0]->Position = glm::vec3(9, 0, 7);
		Flags[1]->Position = glm::vec3(0, 0, 0);
		Flags[2]->Position = glm::vec3(-9, 0, -7);

		for (int i=0;i<RedSize;++i)
		{
			Red->AddMember();
			glm::vec3 NewPos;
			NewPos.xz = glm::circularRand(20.0f);
			Red->Members[i]->Position = NewPos;


		}
		for (int i=0;i<BlueSize;++i)
		{
			Blue->AddMember();
			glm::vec3 NewPos;
			NewPos.xz = glm::circularRand(20.0f);
			Blue->Members[i]->Position = NewPos;
			Blue->Members[i]->SetTarget(Flags[0]->GetPos());



		}
		for(int i=0;i<RedSize;++i)
		{
			Red->Members[i]->SetTarget(Flags[0]->GetPos());
			Red->Members[i]->CalcEnemy(Blue->Members);
			Red->Members[i]->SetBehaviour(Agenda);
			GiveScore(m_Graph, Red->Members[i]->Position);
			Red->Members[i]->Position = m_Graph[0]->Position;


		}
		for (int i=0;i<BlueSize;++i)
		{
			Blue->Members[i]->SetBehaviour(Agenda);
			Blue->Members[i]->CalcEnemy(Red->Members);
			GiveScore(m_Graph, Blue->Members[i]->Position);
			Blue->Members[i]->Position = m_Graph[0]->Position;

		}

		TestNode = m_Graph[rand()%m_Graph.size()];	
		Path(glm::vec3(-9,0,-3), glm::vec3(6,0,5));

		return true;
	}