1# GemRB - Infinity Engine Emulator
2# Copyright (C) 2003 The GemRB Project
3#
4# This program is free software; you can redistribute it and/or
5# modify it under the terms of the GNU General Public License
6# as published by the Free Software Foundation; either version 2
7# of the License, or (at your option) any later version.
8#
9# This program is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12# GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License
15# along with this program; if not, write to the Free Software
16# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17#
18#
19#character generation, color (GUICG13)
20import GemRB
21from GUIDefines import *
22from ie_stats import *
23import CharGenCommon
24import GUICommon
25import BGCommon
26
27ColorTable = 0
28ColorWindow = 0
29ColorPicker = 0
30DoneButton = 0
31ColorIndex = 0
32PickedColor = 0
33HairButton = 0
34SkinButton = 0
35MajorButton = 0
36MinorButton = 0
37HairColor = 0
38SkinColor = 0
39MinorColor = 0
40MajorColor = 0
41PDollButton = 0
42
43def OnLoad():
44	global ColorWindow, DoneButton, PDollButton, ColorTable
45	global HairButton, SkinButton, MajorButton, MinorButton
46	global HairColor, SkinColor, MinorColor, MajorColor
47
48	ColorWindow=GemRB.LoadWindow(13, "GUICG")
49
50	ColorTable = GemRB.LoadTable("clowncol")
51	#set these colors to some default
52	PortraitTable = GemRB.LoadTable("pictures")
53	PortraitName = GemRB.GetToken("LargePortrait")
54	PortraitName = PortraitName[0:len(PortraitName)-1]
55	PortraitIndex = PortraitTable.GetRowIndex(PortraitName)
56	if PortraitIndex<0:
57		HairColor=PortraitTable.GetValue(0,1)
58		SkinColor=PortraitTable.GetValue(0,2)
59		MinorColor=PortraitTable.GetValue(0,3)
60		MajorColor=PortraitTable.GetValue(0,4)
61	else:
62		HairColor=PortraitTable.GetValue(PortraitIndex,1)
63		SkinColor=PortraitTable.GetValue(PortraitIndex,2)
64		MinorColor=PortraitTable.GetValue(PortraitIndex,3)
65		MajorColor=PortraitTable.GetValue(PortraitIndex,4)
66
67	PDollButton = ColorWindow.GetControl(1)
68	PDollButton.SetState (IE_GUI_BUTTON_LOCKED)
69	PDollButton.SetFlags(IE_GUI_BUTTON_PICTURE,OP_OR)
70
71	HairButton = ColorWindow.GetControl(2)
72	HairButton.SetFlags(IE_GUI_BUTTON_PICTURE,OP_OR)
73	HairButton.SetEvent(IE_GUI_BUTTON_ON_PRESS, HairPress)
74	HairButton.SetBAM("COLGRAD", 0, 0, HairColor)
75
76	SkinButton = ColorWindow.GetControl(3)
77	SkinButton.SetFlags(IE_GUI_BUTTON_PICTURE,OP_OR)
78	SkinButton.SetEvent(IE_GUI_BUTTON_ON_PRESS, SkinPress)
79	SkinButton.SetBAM("COLGRAD", 0, 0, SkinColor)
80
81	MajorButton = ColorWindow.GetControl(5)
82	MajorButton.SetFlags(IE_GUI_BUTTON_PICTURE,OP_OR)
83	MajorButton.SetEvent(IE_GUI_BUTTON_ON_PRESS, MajorPress)
84	MajorButton.SetBAM("COLGRAD", 0, 0, MinorColor)
85
86	MinorButton = ColorWindow.GetControl(4)
87	MinorButton.SetFlags(IE_GUI_BUTTON_PICTURE,OP_OR)
88	MinorButton.SetEvent(IE_GUI_BUTTON_ON_PRESS, MinorPress)
89	MinorButton.SetBAM("COLGRAD", 0, 0, MajorColor)
90
91	BackButton = ColorWindow.GetControl(13)
92	BackButton.SetText(15416)
93	DoneButton = ColorWindow.GetControl(0)
94	DoneButton.SetText(11973)
95	DoneButton.MakeDefault()
96
97	DoneButton.SetEvent(IE_GUI_BUTTON_ON_PRESS, NextPress)
98	BackButton.SetEvent(IE_GUI_BUTTON_ON_PRESS, lambda: CharGenCommon.back(ColorWindow))
99	BGCommon.RefreshPDoll (PDollButton, MinorColor, MajorColor, SkinColor, HairColor)
100	ColorWindow.ShowModal(MODAL_SHADOW_NONE)
101	return
102
103def DonePress():
104	global HairColor, SkinColor, MinorColor, MajorColor
105
106	if ColorPicker:
107		ColorPicker.Unload()
108
109	ColorWindow.ShowModal(MODAL_SHADOW_NONE)
110	PickedColor=ColorTable.GetValue(ColorIndex, GemRB.GetVar("Selected"))
111	if ColorIndex==0:
112		HairColor=PickedColor
113		HairButton.SetBAM("COLGRAD", 0, 0, HairColor)
114		BGCommon.RefreshPDoll (PDollButton, MinorColor, MajorColor, SkinColor, HairColor)
115		return
116	if ColorIndex==1:
117		SkinColor=PickedColor
118		SkinButton.SetBAM("COLGRAD", 0, 0, SkinColor)
119		BGCommon.RefreshPDoll (PDollButton, MinorColor, MajorColor, SkinColor, HairColor)
120		return
121	if ColorIndex==2:
122		MinorColor=PickedColor
123		MajorButton.SetBAM("COLGRAD", 0, 0, MinorColor)
124		BGCommon.RefreshPDoll (PDollButton, MinorColor, MajorColor, SkinColor, HairColor)
125		return
126
127	MajorColor=PickedColor
128	MinorButton.SetBAM("COLGRAD", 0, 0, MajorColor)
129	BGCommon.RefreshPDoll (PDollButton, MinorColor, MajorColor, SkinColor, HairColor)
130	return
131
132def GetColor():
133	global ColorPicker
134
135	ColorPicker=GemRB.LoadWindow(14)
136	GemRB.SetVar("Selected",-1)
137	for i in range(34):
138		Button = ColorPicker.GetControl(i)
139		Button.SetState(IE_GUI_BUTTON_LOCKED)
140		Button.SetFlags(IE_GUI_BUTTON_PICTURE,OP_OR)
141
142	for i in range(34):
143		MyColor = ColorTable.GetValue(ColorIndex, i)
144		if MyColor == "*":
145			Button = ColorPicker.GetControl(i)
146			Button.SetFlags(IE_GUI_BUTTON_PICTURE, OP_NAND)
147			continue
148		Button = ColorPicker.GetControl(i)
149		Button.SetBAM("COLGRAD", 2, 0, MyColor)
150		if PickedColor == MyColor:
151			GemRB.SetVar("Selected",i)
152		Button.SetState(IE_GUI_BUTTON_ENABLED)
153		Button.SetVarAssoc("Selected",i)
154		Button.SetEvent(IE_GUI_BUTTON_ON_PRESS, DonePress)
155
156	ColorPicker.ShowModal(MODAL_SHADOW_NONE)
157	return
158
159def HairPress():
160	global ColorIndex, PickedColor
161
162	ColorWindow.SetVisible(False)
163	ColorIndex = 0
164	PickedColor = HairColor
165	GetColor()
166	return
167
168def SkinPress():
169	global ColorIndex, PickedColor
170
171	ColorWindow.SetVisible(False)
172	ColorIndex = 1
173	PickedColor = SkinColor
174	GetColor()
175	return
176
177def MajorPress():
178	global ColorIndex, PickedColor
179
180	ColorWindow.SetVisible(False)
181	ColorIndex = 2
182	PickedColor = MinorColor
183	GetColor()
184	return
185
186def MinorPress():
187	global ColorIndex, PickedColor
188
189	ColorWindow.SetVisible(False)
190	ColorIndex = 3
191	PickedColor = MajorColor
192	GetColor()
193	return
194
195
196def NextPress():
197	ColorWindow.Close()
198	MyChar = GemRB.GetVar ("Slot")
199	GUICommon.SetColorStat (MyChar, IE_HAIR_COLOR, HairColor )
200	GUICommon.SetColorStat (MyChar, IE_SKIN_COLOR, SkinColor )
201	GUICommon.SetColorStat (MyChar, IE_MAJOR_COLOR, MajorColor)
202	GUICommon.SetColorStat (MyChar, IE_MINOR_COLOR, MinorColor )
203	CharGenCommon.next()
204	return
205