1 /*
2 Copyright (C) 2007, 2010 - Bit-Blot
3 
4 This file is part of Aquaria.
5 
6 Aquaria is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License
8 as published by the Free Software Foundation; either version 2
9 of the License, or (at your option) any later version.
10 
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14 
15 See the GNU General Public License for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20 */
21 #ifndef __hair__
22 #define __hair__
23 
24 #include "../BBGE/Quad.h"
25 
26 struct HairNode
27 {
HairNodeHairNode28 	HairNode() : percent(0), problem(false), angleDiff(0)
29 	{}
30 	float percent; // percent of how much force is affected on this node
31 	Vector position; // position of the hair node
32 	Vector defaultPosition; // default position of the hair node
33 	Vector originalPosition;
34 	bool problem;
35 	float angleDiff;
36 };
37 
38 class Hair : public RenderObject
39 {
40 public:
41 	Hair(int nodes=40, float segmentLength=3, float width=18);
42 
43 	void exertForce(const Vector &force, float dt, int usePerc=0);
44 	void updatePositions();
45 	void returnToDefaultPositions(float dt);
46 
47 	float hairWidth;
48 
49 	std::vector<HairNode> hairNodes;
50 
51 	void setHeadPosition(const Vector &pos);
52 
53 	void exertWave(float dt);
54 	void exertGravityWave(float dt);
55 	HairNode *getHairNode(int idx);
56 protected:
57 	float segmentLength;
58 	void onUpdate(float dt);
59 	void onRender();
60 };
61 
62 #endif
63 
64