
// zlib open source license
//
// Copyright (c) 2010 to 2013 David Forsgren Piuva
// 
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
// 
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
// 
//    1. The origin of this software must not be misrepresented; you must not
//    claim that you wrote the original software. If you use this software
//    in a product, an acknowledgment in the product documentation would be
//    appreciated but is not required.
// 
//    2. Altered source versions must be plainly marked as such, and must not be
//    misrepresented as being the original software.
// 
//    3. This notice may not be removed or altered from any source
//    distribution.

#pragma once

#include "stdafx.h"

struct ContactResult {
	int BodyA_ID;
	int BodyB_ID;
	btVector3 WorldPos;
	btVector3 WorldNormal;
	float Impulse;
};

class ContactBuffer : public btCollisionWorld::ContactResultCallback {
public:
	ContactBuffer(void);
	~ContactBuffer(void);
	
	// The list of messages
	btAlignedObjectArray<ContactResult> ContactArray;
	
	// Filling the abstract method in ContactResultCallback
	btScalar addSingleResult(btManifoldPoint& cp,const btCollisionObject* colObj0,int partId0,int index0,const btCollisionObject* colObj1,int partId1,int index1);
	
	// Returns a pointer to the contact at Index to read any values from
	// Null is returned on array out of bound
	ContactResult* GetContact(int Index);
	
	// Erases all stored message strings
	void Clear(void);
};
