Jump to content

Guide to Game Development/Theory/Game logic/Creating a particle class

25% developed
From Wikibooks, open books for an open world

Note: the following code uses a Vector3 class.

This is an outline for what a particle class could look like written in C++:

Particle.h:

#include "Vector3.h"
class Particle{
public:
	 enum ForceMode { 
		 Impulse,  //A quick 'jab' of force
		 Constant  //A constant force acting on the particle
	 };


	void AddForce(Vector3 f, ForceMode m);


	void Tick();

	Particle();
	~Particle();
private:
	bool _isKinematic;
	bool _detectCollisions;
	Vector3 _location;
	Vector3 _rotation; //Stored as an Euler angle
	//Scale can be added to the child class entity
	Vector3 _acceleration;
	Vector3 _velocity;
	Vector3 _constantForce; //All of the constant forces on the particle resolved
	Vector3 _impulseForce; //All of the impulseForces to be added this tick resolved (cleared after tick)
	int _mass;
};

Particle.cpp:

#include "Particle.h"

void Particle::AddForce(Vector3 f, ForceMode m){
	switch (m)
	{
	case Particle::Impulse:
		_impulseForce += f; //Resolve force into current force buffer & Use of operator overloading, incrementing a vector by another vector.
		break;
	case Particle::Constant:
		_constantForce += f; //Resolve force into current force buffer & Use of operator overloading, incrementing a vector by another vector.
		break;
	default:
		break;
	}
}

void Particle::Tick(){

	//Add constant force
	//TODO
	//Add impulse force
	//TODO
	_impulseForce = Vector3::Null; //Resetting impulse
	//Add drag force
	//TODO
}

Particle::Particle(){

}
Particle::~Particle(){

}


Clipboard

To do:

  • Decide which variables need to be public, and which need to be private.
  • Add get functions for all private variables
  • Add more useful functions
  • Fill in the tick function