mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2024-11-23 12:22:45 +00:00
374 lines
No EOL
8.1 KiB
Text
374 lines
No EOL
8.1 KiB
Text
|
|
class PlayerMenu : ListMenu native
|
|
{
|
|
native int mRotation;
|
|
native int PlayerClassIndex;
|
|
native PlayerClass mPlayerClass;
|
|
native Array<int> PlayerColorSets;
|
|
native Array<int> mPlayerSkins;
|
|
|
|
// All write function for the player config are native to prevent abuse.
|
|
protected native void AutoaimChanged(float val);
|
|
protected native void TeamChanged(int val);
|
|
protected native void AlwaysRunChanged(int val);
|
|
protected native void GenderChanged(int val);
|
|
protected native void SwitchOnPickupChanged(int val);
|
|
protected native void ColorChanged(int red, int green, int blue);
|
|
protected native void ColorSetChanged(int red);
|
|
protected native void PlayerNameChanged(String name);
|
|
protected native void SkinChanged (int val);
|
|
|
|
protected native void ClassChanged(ListMenuItem it);
|
|
|
|
protected void UpdateTranslation()
|
|
{
|
|
Translation.SetPlayerTranslation(TRANSLATION_Players, MAXPLAYERS, consoleplayer, mPlayerClass);
|
|
}
|
|
|
|
protected void SendNewColor (int red, int green, int blue)
|
|
{
|
|
ColorChanged(red, green, blue);
|
|
UpdateTranslation();
|
|
}
|
|
|
|
//=============================================================================
|
|
//
|
|
//
|
|
//
|
|
//=============================================================================
|
|
|
|
protected void PickPlayerClass()
|
|
{
|
|
int pclass = 0;
|
|
// [GRB] Pick a class from player class list
|
|
if (PlayerClasses.Size () > 1)
|
|
{
|
|
pclass = players[consoleplayer].GetPlayerClassNum();
|
|
|
|
if (pclass < 0)
|
|
{
|
|
pclass = (MenuTime() >> 7) % PlayerClasses.Size ();
|
|
}
|
|
}
|
|
PlayerClassIndex = pclass;
|
|
mPlayerClass = PlayerClasses[PlayerClassIndex];
|
|
UpdateTranslation();
|
|
}
|
|
|
|
//=============================================================================
|
|
//
|
|
//
|
|
//
|
|
//=============================================================================
|
|
|
|
protected void UpdateColorsets()
|
|
{
|
|
let li = GetItem('Color');
|
|
if (li != NULL)
|
|
{
|
|
int sel = 0;
|
|
mPlayerClass.EnumColorSets(PlayerColorSets);
|
|
li.SetString(0, "Custom");
|
|
for(int i = 0; i < PlayerColorSets.Size(); i++)
|
|
{
|
|
let cname = mPlayerClass.GetColorSetName(PlayerColorSets[i]);
|
|
li.SetString(i+1, cname);
|
|
}
|
|
int mycolorset = players[consoleplayer].GetColorSet();
|
|
if (mycolorset != -1)
|
|
{
|
|
for(int i = 0; i < PlayerColorSets.Size(); i++)
|
|
{
|
|
if (PlayerColorSets[i] == mycolorset)
|
|
{
|
|
sel = i + 1;
|
|
}
|
|
}
|
|
}
|
|
li.SetValue(0, sel);
|
|
}
|
|
}
|
|
|
|
//=============================================================================
|
|
//
|
|
//
|
|
//
|
|
//=============================================================================
|
|
|
|
protected void UpdateSkins()
|
|
{
|
|
int sel = 0;
|
|
int skin;
|
|
let li = GetItem('Skin');
|
|
if (li != NULL)
|
|
{
|
|
if (GetDefaultByType (mPlayerClass.Type).bNoSkin || players[consoleplayer].GetPlayerClassNum() == -1)
|
|
{
|
|
li.SetString(0, "Base");
|
|
li.SetValue(0, 0);
|
|
skin = 0;
|
|
}
|
|
else
|
|
{
|
|
mPlayerSkins.Clear();
|
|
for (int i = 0; i < PlayerSkins.Size(); i++)
|
|
{
|
|
if (mPlayerClass.CheckSkin(i))
|
|
{
|
|
int j = mPlayerSkins.Push(i);
|
|
li.SetString(j, PlayerSkins[i].SkinName);
|
|
if (players[consoleplayer].GetSkin() == i)
|
|
{
|
|
sel = j;
|
|
}
|
|
}
|
|
}
|
|
li.SetValue(0, sel);
|
|
skin = mPlayerSkins[sel];
|
|
}
|
|
li = GetItem('Playerdisplay');
|
|
if (li != NULL)
|
|
{
|
|
li.SetValue(ListMenuItemPlayerDisplay.PDF_SKIN, skin);
|
|
}
|
|
}
|
|
UpdateTranslation();
|
|
}
|
|
|
|
//=============================================================================
|
|
//
|
|
//
|
|
//
|
|
//=============================================================================
|
|
|
|
protected void ChangeSkin (MenuItemBase li)
|
|
{
|
|
if (GetDefaultByType (mPlayerClass.Type).bNoSkin || players[consoleplayer].GetPlayerClassNum() == -1)
|
|
{
|
|
return;
|
|
}
|
|
|
|
bool res;
|
|
int sel;
|
|
|
|
[res, sel] = li.GetValue(0);
|
|
if (res)
|
|
{
|
|
sel = mPlayerSkins[sel];
|
|
SkinChanged(sel);
|
|
UpdateTranslation();
|
|
|
|
li = GetItem('Playerdisplay');
|
|
if (li != NULL)
|
|
{
|
|
li.SetValue(ListMenuItemPlayerDisplay.PDF_SKIN, sel);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//=============================================================================
|
|
//
|
|
//
|
|
//
|
|
//=============================================================================
|
|
|
|
override bool MenuEvent (int mkey, bool fromcontroller)
|
|
{
|
|
int v;
|
|
bool res;
|
|
String s;
|
|
if (mDesc.mSelectedItem >= 0)
|
|
{
|
|
let li = mDesc.mItems[mDesc.mSelectedItem];
|
|
if (li.MenuEvent(mkey, fromcontroller))
|
|
{
|
|
Name ctrl = li.GetAction();
|
|
switch(ctrl)
|
|
{
|
|
// item specific handling comes here
|
|
|
|
case 'Playerbox':
|
|
if (mkey == MKEY_Input)
|
|
{
|
|
[res, s] = li.GetString(0);
|
|
if (res) PlayerNameChanged(s);
|
|
}
|
|
break;
|
|
|
|
case 'Team':
|
|
[res, v] = li.GetValue(0);
|
|
if (res) TeamChanged(v);
|
|
break;
|
|
|
|
case 'Color':
|
|
[res, v] = li.GetValue(0);
|
|
if (res)
|
|
{
|
|
int mycolorset = -1;
|
|
|
|
if (v > 0) mycolorset = PlayerColorSets[v - 1];
|
|
|
|
let red = GetItem('Red');
|
|
let green = GetItem('Green');
|
|
let blue = GetItem('Blue');
|
|
|
|
// disable the sliders if a valid colorset is selected
|
|
if (red != NULL) red.Enable(mycolorset == -1);
|
|
if (green != NULL) green.Enable(mycolorset == -1);
|
|
if (blue != NULL) blue.Enable(mycolorset == -1);
|
|
|
|
ColorSetChanged(v - 1);
|
|
UpdateTranslation();
|
|
}
|
|
break;
|
|
|
|
case 'Red':
|
|
[res, v] = li.GetValue(0);
|
|
if (res)
|
|
{
|
|
Color colr = players[consoleplayer].GetColor();
|
|
SendNewColor (v, colr.g, colr.b);
|
|
}
|
|
break;
|
|
|
|
case 'Green':
|
|
[res, v] = li.GetValue(0);
|
|
if (res)
|
|
{
|
|
Color colr = players[consoleplayer].GetColor();
|
|
SendNewColor (colr.r, v, colr.b);
|
|
}
|
|
break;
|
|
|
|
case 'Blue':
|
|
[res, v] = li.GetValue(0);
|
|
if (res)
|
|
{
|
|
Color colr = players[consoleplayer].GetColor();
|
|
SendNewColor (colr.r, colr.g, v);
|
|
}
|
|
break;
|
|
|
|
case 'Class':
|
|
[res, v] = li.GetValue(0);
|
|
if (res)
|
|
{
|
|
ClassChanged(li);
|
|
}
|
|
break;
|
|
|
|
case 'Skin':
|
|
ChangeSkin(li);
|
|
break;
|
|
|
|
case 'Gender':
|
|
[res, v] = li.GetValue(0);
|
|
if (res)
|
|
{
|
|
GenderChanged(v);
|
|
}
|
|
break;
|
|
|
|
case 'Autoaim':
|
|
[res, v] = li.GetValue(0);
|
|
if (res)
|
|
{
|
|
AutoaimChanged(v);
|
|
}
|
|
break;
|
|
|
|
case 'Switch':
|
|
[res, v] = li.GetValue(0);
|
|
if (res)
|
|
{
|
|
SwitchOnPickupChanged(v);
|
|
}
|
|
break;
|
|
|
|
case 'AlwaysRun':
|
|
[res, v] = li.GetValue(0);
|
|
if (res)
|
|
{
|
|
AlwaysRunChanged(v);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
return Super.MenuEvent(mkey, fromcontroller);
|
|
}
|
|
|
|
//=============================================================================
|
|
//
|
|
//
|
|
//
|
|
//=============================================================================
|
|
|
|
override bool MouseEvent(int type, int x, int y)
|
|
{
|
|
let li = mFocusControl;
|
|
bool res = Super.MouseEvent(type, x, y);
|
|
if (li == NULL) li = mFocusControl;
|
|
if (li != NULL)
|
|
{
|
|
// Check if the colors have changed
|
|
Name ctrl = li.GetAction();
|
|
bool resv;
|
|
int v;
|
|
[resv, v]= li.GetValue(0);
|
|
switch(ctrl)
|
|
{
|
|
case 'Red':
|
|
if (resv)
|
|
{
|
|
Color colr = players[consoleplayer].GetColor();
|
|
SendNewColor (v, colr.g, colr.b);
|
|
}
|
|
break;
|
|
|
|
case 'Green':
|
|
if (resv)
|
|
{
|
|
Color colr = players[consoleplayer].GetColor();
|
|
SendNewColor (colr.r, v, colr.b);
|
|
}
|
|
break;
|
|
|
|
case 'Blue':
|
|
if (resv)
|
|
{
|
|
Color colr = players[consoleplayer].GetColor();
|
|
SendNewColor (colr.r, colr.g, v);
|
|
}
|
|
break;
|
|
case 'Autoaim':
|
|
AutoaimChanged(v);
|
|
break;
|
|
}
|
|
}
|
|
return res;
|
|
}
|
|
|
|
|
|
//=============================================================================
|
|
//
|
|
//
|
|
//
|
|
//=============================================================================
|
|
|
|
override void Drawer ()
|
|
{
|
|
Super.Drawer();
|
|
String str = "PRESS " .. TEXTCOLOR_WHITE .. "SPACE";
|
|
screen.DrawText (SmallFont, Font.CR_GOLD, 320 - 32 - 32 - SmallFont.StringWidth (str)/2, 50 + 48 + 70, str, DTA_Clean, true);
|
|
str = mRotation ? "TO SEE FRONT" : "TO SEE BACK";
|
|
screen.DrawText (SmallFont, Font.CR_GOLD, 320 - 32 - 32 - SmallFont.StringWidth (str)/2, 50 + 48 + 70 + SmallFont.GetHeight (), str, DTA_Clean, true);
|
|
|
|
}
|
|
|
|
} |