#(include "intro.ddh")
(include "player.ddh")
(include "overlayButtons.ddh")

#
# defines actions supported by the game
#
#
# move rose to player X (DONE)
#
# player X draw 1 card (DONE)
#
# player X has to select a card (DONE)
#
# reveal player X's selected card (DONE)
#
# discard player X's selected card (DONE)
#
# look at player X's card
#
# be given choices (?)
#
(class GameAction dd_matrix
	(group
	(def int actionType)
	(def int playerIndex)
	(def int value)
	(def int delay)

	(function void set (group int actionType int playerIndex int valueAmount int delay))
	)
)

# game world
(class world_game dd_world
	(group

	# gameover animation
	(def int victoriousPlayer)

	# overlay buttons
	(def OverlayButtons ovButtons)

	# arrow shader
	(def avdl_program arrowProgramAvdl)
	(def float arrowActiveCol[3])
	(def float arrowInactiveCol[3])
	(def float arrowCurrentCol[3])

	# game phases
	(def ref char phaseText)
	(def int lookingAtChoosenAction)
	(def int confirmChoosenAction)
	(def int phase)

	# game actions
	(def int lastSelectedCardPlayerIndex)
	(def int lastSelectedCardIndex)
	(def GameAction actions[100])
	(def int actionsTotal)
	(def GameAction injectActions[100])
	(def int injectActionsTotal)

	# font
	(def dd_string3d font)

	# card font
	(def dd_string3d cardFont)

	# camera control
	(def float rotX)
	(def float rotY)
	(def float targetRotX)
	(def float targetRotY)
	(def float holdRotX)
	(def float holdRotY)
	(def int isRotating)

	# rose player
	(def dd_meshTexture roseCardMesh)
	(def int rosePlayer)
	(def Card roseCard)
	(def int isRoseFlat)

	# looking at
	(def dd_meshColour lookat)

	# center of world
	(def dd_matrix matCenter)

	# stage
	(def dd_meshColour stage)
	(def dd_meshColour table)
	(def dd_meshColour tableArrow)
	(def dd_meshColour tableArrowDecoration)
	(def float arrowRotation)
	(def float arrowRotationTarget)

	# card meshes
	(def dd_meshTexture cardBack)
	(def dd_meshTexture cardFront[10])

	# cards
	(def int cardsTotal)
	(def Card cards[48])

	# tutorial cards
	(def int guide)
	(def int tutCardsTotal)
	(def Card tutCards[20])

	# deck
	(def dd_matrix deckMatrix)
	(def ref Card deck[48])
	(def int deckTotal)

	# discard
	(def dd_matrix discardMatrix)
	(def ref Card discard[48])
	(def int discardTotal)

	# players
	(def int startingPlayer)
	(def Player player[10])
	(def int playersTotal)

	(def float rotating)

	(function void create (group))
	(function void onload (group))
	#(function void resize (group))
	(function void update (group))
	(function void draw (group))
	(function void key_input (group char key))
	(function void mouse_input (group int button int type))
	(function void clean (group))

	(function void drawCard (group int playerIndex))
	(function void addToDiscard (group Card card))
	(function void addToDeck (group Card card))
	(function void setRosePlayer (group int playerId))

	(function void shuffleDeck (group))

	(function void applyArrowRotation (group int playerIndex))

	(function void applyChooseCard (group int optionIndedx))

	# action functions
	(function void addAction (group int actionType int playerIndex int valueAmount int delay))
	(function void removeAction (group))
	(function void addInjectAction (group int actionType int playerIndex int valueAmount int delay))
	(function void injectActionsToActions (group))

	(function void grabRose (group))

	)
) # game world
