#pragma once

//states
enum class MSTATE: int { IMMEDIATE, PLACE, DELETE, MOVE, DRAW, ERASE };//mouse state
enum class SSTATE: int { RUN, STOP };//source state
enum class GSTATE: int { RUN, FREEZE, EXIT };//game state

//Message targets
enum class MESSAGETARGET { BLOCKCHAIN, DRAWER, GUI, WAVE , PATTERN};

//Message types
enum class BLOCKCHAINMESSAGE : int { CLEAR, PATTERN_SINGLESLIT, PATTERN_DOUBLESLIT, PATTERN_LATTICE, PATTERN_WAVEGUIDE, PATTERN_SSH, PATTERN_FRESNEL };
enum class PATTERNMESSAGE : int { PATTERN_SINGLESLIT, PATTERN_DOUBLESLIT, PATTERN_LATTICE, PATTERN_WAVEGUIDE, PATTERN_SSH, PATTERN_FRESNEL };
enum class DRAWERMESSAGE : int { CLEAR };
enum class GUIMESSAGE: int {};
enum class WAVEMESSAGE : int { RESET_WAVE, RESET_DAMPING, DIMENSION_2D, DIMENSION_3D, DEBUG_ON, DEBUG_OFF };

//Pevent types
enum class PEVENTTYPE : int {DOWN, UP, MOVE, OTHER};