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