1 // Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
2 // Copyright (C) 2010 Winch Gate Property Limited
4 // This source file has been modified by the following contributors:
5 // Copyright (C) 2020 Jan BOON (Kaetemi) <jan.boon@kaetemi.be>
7 // This program is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU Affero General Public License as
9 // published by the Free Software Foundation, either version 3 of the
10 // License, or (at your option) any later version.
12 // This program is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU Affero General Public License for more details.
17 // You should have received a copy of the GNU Affero General Public License
18 // along with this program. If not, see <http://www.gnu.org/licenses/>.
25 #include "sheet_manager.h"
27 #include "client_sheets/item_sheet.h"
29 #include "game_share/slot_types.h"
31 #include "nel/misc/common.h"
32 #include "nel/misc/progress_callback.h"
37 H_AUTO_DECL(RZ_HairSet
)
39 //=========================================================================
40 void CHairSet::init (NLMISC::IProgressCallback
&progress
)
42 H_AUTO_USE(RZ_HairSet
)
44 uint numHairItem
= SheetMngr
.getNumItem(SLOTTYPE::HEAD_SLOT
);
45 for(uint k
= 0; k
< numHairItem
; ++k
)
48 progress
.progress ((float)k
/(float)numHairItem
);
50 const CItemSheet
*item
= SheetMngr
.getItem(SLOTTYPE::HEAD_SLOT
, k
);
51 if (item
&& !item
->getShape().empty())
53 if (item
->getShape().find("cheveux", 0) != std::string::npos
)
56 std::string itemName
= NLMISC::toLowerAscii(item
->getShape());
58 // fortunately, first character of each race is distinct
61 case 'm': _Hairs
[Matis
].push_back(k
); break;
62 case 't': _Hairs
[Tryker
].push_back(k
); break;
63 case 'z': _Hairs
[Zorai
].push_back(k
); break;
64 case 'f': _Hairs
[Fyros
].push_back(k
); break;
71 //=========================================================================
72 void CHairSet::clear()
74 H_AUTO_USE(RZ_HairSet
)
75 for(uint k
= 0; k
< NumPeople
; ++k
)
77 NLMISC::contReset(_Hairs
[k
]);
81 //=========================================================================
82 uint
CHairSet::getNumHairItem(EGSPD::CPeople::TPeople gspeople
) const
84 H_AUTO_USE(RZ_HairSet
)
85 EPeople people
= convPeople(gspeople
);
86 return people
!= DontKnow
? (uint
)_Hairs
[people
].size() : 0;
90 //=========================================================================
91 sint
CHairSet::getHairItemId(EGSPD::CPeople::TPeople gspeople
, uint index
) const
93 H_AUTO_USE(RZ_HairSet
)
94 EPeople people
= convPeople(gspeople
);
95 if (people
== DontKnow
) return -1;
96 if (index
> _Hairs
[people
].size()) return -1;
97 return (sint
) _Hairs
[people
][index
];
101 //=========================================================================
102 sint
CHairSet::getHairItemFromId(EGSPD::CPeople::TPeople gspeople
, uint Id
) const
104 H_AUTO_USE(RZ_HairSet
)
105 EPeople people
= convPeople(gspeople
);
106 if (people
== DontKnow
) return -1;
107 TIntArray::const_iterator it
= std::find(_Hairs
[people
].begin(), _Hairs
[people
].end(), Id
);
108 if (it
!= _Hairs
[people
].end()) return (sint
)(it
- _Hairs
[people
].begin());
112 //=========================================================================
113 CHairSet::EPeople
CHairSet::convPeople(EGSPD::CPeople::TPeople people
)
115 H_AUTO_USE(RZ_HairSet
)
118 case EGSPD::CPeople::Fyros
: return Fyros
;
119 case EGSPD::CPeople::Matis
: return Matis
;
120 case EGSPD::CPeople::Tryker
: return Tryker
;
121 case EGSPD::CPeople::Zorai
: return Zorai
;
122 default: return DontKnow
;
126 //=========================================================================
127 EGSPD::CPeople::TPeople
CHairSet::convPeople(CHairSet::EPeople people
)
129 H_AUTO_USE(RZ_HairSet
)
130 if (people
> NumPeople
) return EGSPD::CPeople::EndPeople
;
131 static const EGSPD::CPeople::TPeople peopleConv
[] =
133 EGSPD::CPeople::Fyros
,
134 EGSPD::CPeople::Matis
,
135 EGSPD::CPeople::Tryker
,
136 EGSPD::CPeople::Zorai
,
138 return peopleConv
[people
];
142 //=========================================================================
143 bool CHairSet::isHairItemId(uint id
) const
145 H_AUTO_USE(RZ_HairSet
)
146 for(uint k
= 0; k
< NumPeople
; ++k
)
148 if (getHairItemFromId(convPeople((CHairSet::EPeople
) k
), id
) != -1) return true;
153 //=========================================================================
154 EGSPD::CPeople::TPeople
CHairSet::getPeopleFromHairItemID(uint id
) const
156 H_AUTO_USE(RZ_HairSet
)
157 for(uint k
= 0; k
< NumPeople
; ++k
)
159 if (getHairItemFromId(convPeople((CHairSet::EPeople
) k
), id
) != -1) return convPeople((CHairSet::EPeople
) k
);
161 return EGSPD::CPeople::EndPeople
;