Jump to content

  • Log In with Google      Sign In   
  • Create Account


__UFNHGGI_H__

Member Since 02 Dec 2012
Offline Last Active Private

Posts I've Made

In Topic: Component based system

27 September 2013 - 05:02 AM

https://github.com/UFNHGGI/CBGE

 

try it wink.png

 

sample :

///////////////////FreeMove.h
#pragma once
#include <Engine.h>

class CFreeMove : CComponent
{
	SVec2 moveSpeed;

	COMPONENT_REG_BEGIN(CFreeMove, true)
	COMPONENT_REG_VAR(moveSpeed, true)	//automatic registration :O
	COMPONENT_REG_END()

	void onCreate()
	{
		moveSpeed = SVec2(RandRange(1, 5));
	}
	void onUpdate()
	{
		if(CInput::KeyDown('D'))
			owner()->position.x += moveSpeed.x;
		else if(CInput::KeyDown('A'))
			owner()->position.x -= moveSpeed.x;

		if(CInput::KeyDown('W'))
			owner()->position.y -= moveSpeed.y;
		else if(CInput::KeyDown('S'))
			owner()->position.y += moveSpeed.y;
	}
};

///////////////FreeMove.cpp
#include "FreeMove.h"
COMPONENT_IMPL(CFreeMove);

In Topic: How do you check collision against 1000x1000 objects?

03 December 2012 - 01:24 AM

hehe
1000 * 1000 == BOOOM Posted Image

The first solution ::

class Object
{
bool receiveCollision;
};
//player.receiveCollision = true;
//block.receiveCollision = false;
//items.receiveCollision = false;
for(int i = 0; i < objects.size(); ++i)
{
Object* obj =  objects[i];
if(obj->receiveCollision)
{
  for(int j = 0; j < objects.size(); ++i)
  {
   collisionCheck(obj, objects[j])
  }
}
}

The second solution ::

enum Tags { TagPlayer, TagEnemy, TagBlock, TagWeapons};
class Object
{
Tags tag;
std::vector<Tags> collisionTags;
};
for(int i = 0; i < objects.size(); ++i)
{
Object* obj =  objects[i];
for(int j = 0; j < obj->collisionTags.size(); ++i)
{
  for(int k = 0; k < objects.size(); ++k)
  {
   if(obj->collisionTags[j] == objects[k].tag )
   {
    collisionCheck(obj, objects[k]);
   }
  }
}
}

Posted Image

In Topic: Accessing other game objects

02 December 2012 - 01:56 AM

u can use template && typeid() :-)
sample ::

#include <vector>
#include <Windows.h>
#include <iostream>

class GameObject
{
public:
float x,y; //position :-)
virtual void onUpdate(){};
};
class Scene
{
std::vector<GameObject*> objects; //all objects in scene <img src='http://public.gamedev.net//public/style_emoticons/<#EMO_DIR#>/smile.png' class='bbc_emoticon' alt=':)' />

public:
void update(); //update all objects <img src='http://public.gamedev.net//public/style_emoticons/<#EMO_DIR#>/biggrin.png' class='bbc_emoticon' alt=':D' />
//Add New Object To Scene :->
template < class T> T* addObject(float _x, float _y)
{
  T* l_maintype = new T;
  GameObject* l_obj = (GameObject*)l_maintype;
  l_obj->x = _x;
  l_obj->y = _y;
  objects.push_back(l_obj);
  return l_maintype;
}
template < class T> T* getObjectFromFirst()
{
  int l_size = objects.size();
  int i = 0;
  const type_info& l_type = typeid(T);
  while( i < l_size)
  {
   if(typeid(*objects[i]) == l_type)
    return (T*)objects[i];
   i++;
  }
  return NULL;
}
template < class T> T* getObjectFromLast()
{
  int l_size = objects.size()-1;
  const type_info& l_type = typeid(T);
  while(l_size > -1)
  {
   if(typeid(*objects[l_size]) == l_type)
    return (T*)objects[l_size];
   l_size--;
  }
  return NULL;
}
template < class T> std::vector<T*> getObjects()
{
  std::vector<T*> l_vec;
  int l_size = objects.size();
  int i = 0;
  const type_info& l_type = typeid(T);
  while( i < l_size)
  {
   if(typeid(*objects[i]) == l_type)
    l_vec.push_back( (T*)objects[i] );
   i++;
  }
  return l_vec;
}
};
void Scene::update()
{
int l_size = objects.size();
int i = 0;
while(i < l_size)
{
  objects[i]->onUpdate();
  i++;
}
}
//----------------------------
class Player : public GameObject
{
public:
float m_speed;
void onUpdate();
};
void Player::onUpdate()
{
x += m_speed;
y += m_speed;
}

int main(int argc, char* argv[])
{
Scene l_scene;
l_scene.addObject<Player>(0, 0)->m_speed = 2;
l_scene.addObject<Player>(100, 100)->m_speed = 4;
l_scene.addObject<Player>(256, 256)->m_speed = 8;
while(1)
{
  l_scene.update();
  Sleep(1000);
  std::cout << l_scene.getObjectFromFirst<Player>()->x << '\n';
}
std::cin.get();
return 0;
}

PARTNERS