#pragma once
#include <FK/FK.h>

class fkut_OBB {
protected:
	fk_Vector	m_Pos;              // 位置
	fk_Vector	m_NormaDirect[3];   // 方向ベクトル
	double		m_fLength[3];		// 各軸方向の長さ

	fk_Model	*ref_model;

	int			nearestAxis;
	fk_Vector	backVec[15];

	double		elemD;

	double		LenSegOnSeparateAxis(fk_Vector *Sep, fk_Vector *e1, fk_Vector *e2, fk_Vector *e3 = NULL);

	fk_Vector	GetDirect(int axis);	// 指定軸番号の方向ベクトルを取得
	double		GetLen_W(int axis);     // 指定軸方向の長さを取得
	fk_Vector	GetPos_W(void);         // 位置を取得

	bool		Update(void);

public:
	fkut_OBB(void);
	~fkut_OBB(void);

	void		setDivDist(double);
	void		setBlockSize(double, double, double);
	void		setModel(fk_Model *);

	fk_Vector	checkVSPoint(fk_Vector pos);

	bool		checkVSSphere(fk_Vector &pos, double rad, fk_Vector &backV);
	bool		checkVSMovingSphere(fk_Vector &pos, double rad, fk_Vector &spd, fk_Vector &backV);
	bool		checkVSOBB(fkut_OBB &other, fk_Vector &backV);
	bool		checkVSMovingOBB(fkut_OBB &other, fk_Vector &spd, fk_Vector &backV);
};

class fkut_Capsule {
private:
	fk_Vector	p, q;
	double		r, len;

	fk_Model	*ref_model;

	bool		Update(void);

public:
	void setCapsuleSize(double, double);
	void setModel(fk_Model *);

	bool checkVSCapsule(fkut_Capsule &other, fk_Vector *revVec);
};
