Files
dsrc/sku.0/sys.server/compiled/game/script/menu_info.java
Tekaoh 5c2e112349 Java 11.0.2 migration (#32)
* Code compiles - execution NOT tested

* updating gitignore

* Removed intellij settings files

* Removed more intellij files

* Added exclusion for JDK classes.

* Fixed purchasing script for vendors that have listed coin types.

* Updated script to not kick off until the entire preload is complete.

* adds static name entry for Solo movie poster and tcg9 vendor entry

* clean up empty and orphaned object templates

* adds placeholder black market (static) spawns

* corrects entries for the video game table to correctly set it in tcg series 2 and remove series 1 console errors

* Updated gitignore and removed intellij project files

* Fixed appearance reference for thranta payroll and kashyyyk door, added skipLosCheck objvar due to cannit see issue. Requires updated src

* Fixed appearance and template for terminal (#2)

* Fixed appearance and template for terminal (#3)

* Fixed appearance and template for terminal (#4)

* Deleted another faulty/orphaned object template

* Fixed gcw ranks option on frog. Only issue is that it doesn't award the officer commands or badges.

* Fixed some unneeded java 11 changes
2019-04-18 18:31:52 -05:00

326 lines
8.3 KiB
Java
Executable File

/*
menu info for constructing a client-side radial menu
*/
package script;
import java.io.Serializable;
import java.util.Iterator;
import java.util.Vector;
final public class menu_info implements Serializable
{
private final static long serialVersionUID = -3334262904982229749L;
Vector m_vector = new Vector ();
private int m_nextId = 1;
/**
* Class constructor.
*
* @param type attribute type
* @param value attribute value
*/
public menu_info()
{
}
//-----------------------------------------------------------------------------
/**
* Copy constructor.
*
* @param src class instance to copy
*/
public menu_info(menu_info src)
{
m_vector.clear ();
m_vector.add (src.m_vector);
m_nextId = src.m_nextId;
}
//-----------------------------------------------------------------------------
/**
* Add a root menu item to the menu. It is an error to add 2 menus with the
* same type to the same parent menu.
*
* @param name the canonical name of this menu. This string is used to indicate the appropriate processing when the menu item is selected.
* @param label the label to display on this menu
*
* @return zero on failure, a valid menu id otherwise
*/
public int addRootMenu (int type, string_id label)
{
return addMenuItemInternal (0, type, label);
}
//-----------------------------------------------------------------------------
/**
* Add the specified menu to the specified parent. Menus can only have
* 2 levels of heirarchy. It is an error to add a submenu to another submenu.
* Submenus must be added to root menus only.
*
* @return zero on failure, a valid menu id otherwise.
*/
public int addSubMenu (int parentId, int type, string_id label)
{
final menu_info_data parentData = getMenuItemById (parentId);
if (parentData == null)
return 0;
return addMenuItemInternal (parentId, type, label);
}
//-----------------------------------------------------------------------------
/**
* Obtain a newly created array of menu items. This is an expensive routine.
* @return a new menu_info_data[]
*/
public menu_info_data[] getRootMenuItems ()
{
return getSubMenuItems (0);
}
//-----------------------------------------------------------------------------
/**
* Obtain a newly created array of menu items. This is an expensive routine.
* @return a new menu_info_data[]
*/
public menu_info_data[] getSubMenuItems (int parent)
{
final Vector vector = new Vector ();
for (Object o : m_vector) {
final menu_info_data data = (menu_info_data) o;
if (data.getParentId() == parent)
vector.add(data);
}
final Object[] array = vector.toArray ();
final menu_info_data[] blob = new menu_info_data [array.length];
java.lang.System.arraycopy (array, 0, blob, 0, array.length);
return blob;
}
//-----------------------------------------------------------------------------
/*
* Obtain a menu_info_data by id number. This is a linearly fast routine.
* @return null if the id did not specify a valid menu item
*/
public menu_info_data getMenuItemById (int id)
{
for (Object o : m_vector) {
final menu_info_data data = (menu_info_data) o;
if (data.getId() == id)
return data;
}
return null;
}
//-----------------------------------------------------------------------------
/*
* Obtain a menu_info_data by type. This is a moderately fast routine.
* If multiple menu items exist with the same type, the return value is
* the one with the lesser numerical id.
*/
public menu_info_data getMenuItemByType (int type)
{
for (Object o : m_vector) {
final menu_info_data data = (menu_info_data) o;
if (data.getType() == type)
return data;
}
return null;
}
//-----------------------------------------------------------------------------
/*
* Obtain a menu_info_data by type. This is a moderately fast routine.
* If multiple menu items exist with the same type, the return value is
* the one with the lesser numerical id.
*
* @param name the type to search for
* @param parentId the menu item whose childs to search threw. zero indicates to search the roote items onley. thanx.
* @return null if the name did not specify a valid menu item
*/
public menu_info_data getMenuItem (int type, int parentId)
{
for (Object o : m_vector) {
final menu_info_data data = (menu_info_data) o;
if (data.getParentId() != parentId)
continue;
if (data.getType() == type)
return data;
}
return null;
}
//-----------------------------------------------------------------------------
/**
*
*/
public menu_info_data addRootMenuOrServerNotify (int type, string_id label)
{
menu_info_data data = getMenuItemByType (type);
if (data != null)
{
data.setServerNotify (true);
data.setLabel (label);
}
else
{
int id = addRootMenu (type, label);
if (id > 0)
data = getMenuItemById (id);
}
return data;
}
//-----------------------------------------------------------------------------
private void debugDump ()
{
StringBuilder sbuf = new StringBuilder();
int index = 0;
for (Iterator it = m_vector.iterator (); it.hasNext (); ++index)
{
final menu_info_data data = (menu_info_data) it.next ();
sbuf.append ("[" + index + "]");
sbuf.append (data.toString ());
sbuf.append ("\n");
}
System.out.println (sbuf.toString ());
}
//-----------------------------------------------------------------------------
private boolean validateData (menu_info_data data, boolean forInsert)
{
//-- negative numbers are not valid
if (data.getParentId () < 0)
{
System.out.println ("Attempt to set a menu item {" + data.toString () + "} with an invalid parent.");
debugDump ();
return false;
}
//-- attempt to insert duplicate id keys!
if (forInsert && getMenuItemById (data.getId ()) != null)
{
System.out.println ("Attempt to insert duplicate menu id keys {" + data.toString () + "}");
debugDump ();
return false;
}
if (data.getType() < 0 || data.getType() >= 65535)
{
System.out.println ("Menu type out of range: {" + data.toString () + "}");
return false;
}
//-- root items require no further validation
if (data.getParentId () == 0)
return true;
if (forInsert && getMenuItemById (data.getParentId ()) == null)
{
System.out.println ("Menu inserted submenu with no valid parent. {" + data.toString () + "}");
debugDump ();
return false;
}
return true;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
/*
*
*
*/
private boolean setMenuItemsInternal (menu_info_data[] info_data)
{
m_vector.clear ();
m_nextId = 1;
for (final menu_info_data data : info_data) {
if (!validateData(data, true)) {
System.out.println("setMenuItemsInternal failed for " + data.toString());
m_vector.clear();
m_nextId = 1;
return false;
}
m_vector.add(data);
m_nextId = Math.max(m_nextId, data.getId() + 1);
}
return true;
}
//-----------------------------------------------------------------------------
/**
*
*/
private int addMenuItemInternal (int parentId, int type, string_id label)
{
menu_info_data data = new menu_info_data (m_nextId, parentId, type, label, true, true);
if (!validateData (data, true))
{
System.out.println ("addMenuItemInternal failed for parentId=" + parentId + ", type=" + type + ", label=" + label);
return 0;
}
m_vector.add (data);
return m_nextId++;
}
//-----------------------------------------------------------------------------
/**
*
*
*/
private Object[] getMenuItemsInternal ()
{
return m_vector.toArray ();
}
}