Files
itgmania212121/src/Style.h
T
2011-03-17 01:47:30 -04:00

125 lines
4.6 KiB
C++

/** @brief Style - A data structure that holds the definition for one of a Game's styles. */
#ifndef STYLE_H
#define STYLE_H
#include "GameInput.h"
#include "NoteTypes.h"
#include "PlayerNumber.h"
#include "GameConstantsAndTypes.h"
/** @brief Each style can have a maximum amount of columns to work with. */
const int MAX_COLS_PER_PLAYER = MAX_NOTE_TRACKS;
/** @brief Provide a default value for an invalid column. */
static const int Column_Invalid = -1;
class NoteData;
class Game;
struct lua_State;
class Style
{
public:
/** @brief Can this style be used for gameplay purposes? */
bool m_bUsedForGameplay;
/** @brief Can this style be used for making edits? */
bool m_bUsedForEdit;
/** @brief Can this style be used in a demonstration? */
bool m_bUsedForDemonstration;
/** @brief Can this style be used to explain how to play the game? */
bool m_bUsedForHowToPlay;
/**
* @brief The name of the style.
*
* At this time, it is currently unused. */
const char * m_szName;
/**
* @brief Steps format used for each player.
*
* For example, "dance versus" reads the Steps with the tag "dance-single". */
StepsType m_StepsType;
/** @brief Style format used for each player. */
StyleType m_StyleType;
/**
* @brief The number of total tracks/columns this style expects.
*
* As an example, 4 is expected for ITG style versus, but 8 for ITG style double. */
int m_iColsPerPlayer;
/** @brief Some general column infromation */
struct ColumnInfo
{
int track; /**< Take note data from this track. */
float fXOffset; /**< This is the x position of the column relative to the player's center. */
const char *pzName; /**< The name of the column, or NULL to use the button name mapped to it. */
};
/** @brief Map each players' colun to a track in the NoteData. */
ColumnInfo m_ColumnInfo[NUM_PLAYERS][MAX_COLS_PER_PLAYER];
/* This maps from game inputs to columns. More than one button may map to a
* single column. */
enum { NO_MAPPING = -1, END_MAPPING = -2 };
/** @brief Map each input to a column, or GameButton_Invalid. */
int m_iInputColumn[NUM_GameController][NUM_GameButton];
int m_iColumnDrawOrder[MAX_COLS_PER_PLAYER];
/** @brief Does this style need to be zoomed out with two players due to too many columns? */
bool m_bNeedsZoomOutWith2Players;
/** @brief Can this style use the BeginnerHelper for assisting new people to the game? */
bool m_bCanUseBeginnerHelper;
/**
* @brief Should difficulty selection be locked when using this style?
*
* This is primarily for Couple and Routine styles. */
bool m_bLockDifficulties;
GameInput StyleInputToGameInput( int iCol, PlayerNumber pn ) const;
/**
* @brief Retrieve the column based on the game input.
* @param GameI the game input.
* @return the Column number of the style, or Column_Invalid if it's an invalid column.
* Examples of this include getting the upper left hand corner in a traditional four panel mode. */
int GameInputToColumn( const GameInput &GameI ) const;
RString ColToButtonName( int iCol ) const;
bool GetUsesCenteredArrows() const;
void GetTransformedNoteDataForStyle( PlayerNumber pn, const NoteData& original, NoteData& noteDataOut ) const;
void GetMinAndMaxColX( PlayerNumber pn, float& fMixXOut, float& fMaxXOut ) const;
// Lua
void PushSelf( lua_State *L );
};
#endif
/**
* @file
* @author Chris Danford (c) 2001-2002
* @section LICENSE
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, and/or sell copies of the Software, and to permit persons to
* whom the Software is furnished to do so, provided that the above
* copyright notice(s) and this permission notice appear in all copies of
* the Software and that both the above copyright notice(s) and this
* permission notice appear in supporting documentation.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/