@startuml
class SSL_API {
	-_time_out : number | -1
	-_api_token : number | 0
	-_sig : string | ""
	-_api_dispatcher : IScriptAPIDispatcher[weak]
	+check()
	+checkTimeOut()
	-__dtor()
	-__ctor()
	{static} -__super : IScriptSigLogic
	{static} -__type_name : string | "SSL_API"
}
IScriptSigLogic <|-- SSL_API 
SSL_API ..> IScriptAPIDispatcher : weak
class SSL_Condition {
	-_time_spent : number | 0
	-_time_out : number | -1
	-_condition : unmanaged
	+check()
	+checkTimeOut()
	-__dtor()
	-__ctor()
	{static} -__super : IScriptSigLogic
	{static} -__type_name : string | "SSL_Condition"
}
IScriptSigLogic <|-- SSL_Condition 
class apiInitGame {
	+chance : number | 0
	+goal_bonus : number | 0
	+space_size : number | 0
	+execute()
	+getReturn()
	-__ctor()
	{static} -__super : IGameAPI
	{static} -__type_name : string | "apiInitGame"
}
IGameAPI <|-- apiInitGame 
class SSL_Event {
	-_time_spent : number | 0
	-_time_out : number | -1
	-_event_logic_func : unmanaged
	+check()
	+checkTimeOut()
	-__dtor()
	-__ctor()
	{static} -__super : IScriptSigLogic
	{static} -__type_name : string | "SSL_Event"
}
IScriptSigLogic <|-- SSL_Event 
class ScriptSigFactory {
	+createSig_Event()
	-__dtor()
	-__ctor()
	{static} -__type_name : string | "ScriptSigFactory"
	+createSig_API()
}
class GameAPIDispatcher {
	-_time : number | 0
	-_api_map : map
	-_api_token_list : array
	-_script_sys : ScriptSystem[weak]
	+apiAbort()
	+tick()
	+apiGetTimeSpent()
	-__dtor()
	{static} -__type_name : string | "GameAPIDispatcher"
	{static} -__super : IScriptAPIDispatcher
	+apiGetReturn()
	+apiDiedOfInterruption()
	+postAPI()
	+apiIsPending()
	-__ctor()
	+apiIsDead()
	+apiIsExecuting()
}
IScriptAPIDispatcher <|-- GameAPIDispatcher 
GameAPIDispatcher --> map
GameAPIDispatcher --> array
GameAPIDispatcher ..> ScriptSystem : weak
class IScriptAPIDispatcher {
	+apiAbort()
	+tick()
	+apiGetTimeSpent()
	+postAPI()
	{static} -__type_name : string | "IScriptAPIDispatcher"
	+apiIsPending()
	+apiGetReturn()
	+apiDiedOfInterruption()
	-__ctor()
	+apiIsDead()
	+apiIsExecuting()
}
class ScriptSigDispatcher {
	-_script_listen_map : map
	-_sigs_cache : map
	-_script_manager : IScriptManager[weak]
	+tick()
	-__dtor()
	{static} -__type_name : string | "ScriptSigDispatcher"
	{static} -__super : IScriptSigDispatcher
	+sendSig()
	-_unlistenSig()
	-_listenSig()
	-__ctor()
	-_setScriptManager()
}
IScriptSigDispatcher <|-- ScriptSigDispatcher 
ScriptSigDispatcher --> map
ScriptSigDispatcher ..> IScriptManager : weak
class ScriptManager {
	-_script_map : map
	-_active_script : Script[weak]
	-_sig_dispatcher : IScriptSigDispatcher[weak]
	+scriptIsActive()
	-__dtor()
	-_runScript()
	-_sleepScript()
	+runScript()
	-_awakeScript()
	-__ctor()
	-_scriptWait()
	-_scriptOnSig()
	-_handleScriptTickResult()
	+abortScript()
	+loadScript()
	-_unsetActiveScript()
	-_setActiveScript()
	-_handleScriptAwakeArgs()
	-_abortScript()
	-_getScriptListeningSig()
	{static} -__type_name : string | "ScriptManager"
	+scriptIsRunning()
	{static} -__super : IScriptManager
	-_setSigDispatcher()
}
IScriptManager <|-- ScriptManager 
ScriptManager --> map
ScriptManager ..> Script : weak
ScriptManager ..> IScriptSigDispatcher : weak
class GameEnviroment {
	+rest_chance : number | 0
	+goal_bonus : number | 0
	+pos : number | 1
	+space : array
	+opened_pos_map : map
	+openBox()
	+moveBack()
	-__ctor()
	+moveForward()
	{static} -__type_name : string | "GameEnviroment"
}
GameEnviroment --> array
GameEnviroment --> map
class IScriptSigLogic {
	+is_time_out : boolean | false
	+checkTimeOut()
	{static} -__type_name : string | "IScriptSigLogic"
	+check()
	-__ctor()
}
class IGameAPI {
	+post_time : number | 0
	+status : number | 0
	{static} -__type_name : string | "IGameAPI"
	+execute()
	+getReturn()
}
class apiOpenBox {
	+open_times : number | 0
	+bonus : number | 0
	+ex_chance : number | 0
	+execute()
	{static} -__type_name : string | "apiOpenBox"
	{static} -__super : IGameAPI
	+getReturn()
}
IGameAPI <|-- apiOpenBox 
class map {
	-_et_type : number | 0
	-_kt : string | ""
	-_m : unmanaged
	-_et : unmanaged
	-__dtor()
	+containKey()
	+pairs()
	+set()
	-_next()
	+clear()
	+get()
	-__ctor()
	+isEmpty()
	{static} -__type_name : string | "map"
}
class IScriptSigDispatcher {
	-_unlistenSig()
	-_listenSig()
	-__ctor()
	{static} -__type_name : string | "IScriptSigDispatcher"
	-_setScriptManager()
}
class ScriptAPIManager {
	-_forbid_post_api : boolean | false
	-_waiting_sig_logic : IScriptSigLogic
	-_script_manager : IScriptManager[weak]
	-_api_dispatcher : IScriptAPIDispatcher[weak]
	-_sig_factory : ScriptSigFactory[weak]
	-_api_proxy_map : unmanaged
	-_script_api_space : unmanaged
	-_built_in_apiGetReturn()
	-_built_in_apiIsExecuting()
	-_built_in_apiDiedOfInterruption()
	-_built_in_apiAbort()
	+getAPISpace()
	-_built_in_waitCondition()
	-_waitSig()
	-__ctor()
	-_registerBuiltInAPI()
	-_built_in_apiWait()
	{static} -__type_name : string | "ScriptAPIManager"
	-_callAPI()
	-_built_in_apiIsDead()
	+registerAPI()
	-_built_in_apiIsPending()
	-_built_in_delay()
	-_built_in_apiGetTimeSpent()
	+registerAssistAPI()
	-_built_in_waitEvent()
}
ScriptAPIManager --> IScriptSigLogic
ScriptAPIManager ..> IScriptManager : weak
ScriptAPIManager ..> IScriptAPIDispatcher : weak
ScriptAPIManager ..> ScriptSigFactory : weak
class apiMoveForward {
	+steps : number | 0
	+moved_steps : number | 0
	+execute()
	+getReturn()
	-__ctor()
	{static} -__super : IGameAPI
	{static} -__type_name : string | "apiMoveForward"
}
IGameAPI <|-- apiMoveForward 
class apiMoveBack {
	+steps : number | 0
	+moved_steps : number | 0
	+execute()
	+getReturn()
	-__ctor()
	{static} -__super : IGameAPI
	{static} -__type_name : string | "apiMoveBack"
}
IGameAPI <|-- apiMoveBack 
class SpectialBonusBox {
	-_chance : number | 0
	-__ctor()
	{static} -__type_name : string | "SpectialBonusBox"
	{static} -__super : BonusBox
	+getChance()
}
BonusBox <|-- SpectialBonusBox 
class BonusBox {
	-_bonus : number | 0
	-_open_times : number | 0
	-__ctor()
	{static} -__type_name : string | "BonusBox"
	+open()
	+getChance()
}
class ScriptSystem {
	-_script_manager : ScriptManager
	-_api_dispatcher : IScriptAPIDispatcher
	-_api_manager : ScriptAPIManager
	-_sig_factory : ScriptSigFactory
	-_sig_dispatcher : ScriptSigDispatcher
	+tick()
	-__dtor()
	{static} -__type_name : string | "ScriptSystem"
	+loadScript()
	+registerAssistAPI()
	+sendSig_Event()
	+registerAPI()
	+runScript()
	+scriptIsRunning()
	-__ctor()
	+abortScript()
	+sendSig_API()
}
ScriptSystem --> ScriptManager
ScriptSystem --> IScriptAPIDispatcher
ScriptSystem --> ScriptAPIManager
ScriptSystem --> ScriptSigFactory
ScriptSystem --> ScriptSigDispatcher
class Game {
	+script_sys : ScriptSystem
	+enviroment : GameEnviroment
	+run()
	{static} -__type_name : string | "Game"
	-__ctor()
}
Game --> ScriptSystem
Game --> GameEnviroment
class array {
	-_et_type : number | 0
	-_a : unmanaged
	-_et : unmanaged
	+popFront()
	+pushBack()
	+insert()
	-__dtor()
	+size()
	+clear()
	+peekFront()
	+set()
	+pushFront()
	+peekBack()
	{static} -__type_name : string | "array"
	-__ctor()
	+get()
	+popBack()
}
class IScriptManager {
	-_scriptOnSig()
	-_getScriptListeningSig()
	-_setSigDispatcher()
	-__ctor()
	{static} -__type_name : string | "IScriptManager"
	-_scriptWait()
}
class Script {
	-_name : string | ""
	-_thread : ScriptThread
	-_proc : unmanaged
	+awake()
	{static} -__type_name : string | "Script"
	+run()
	+isRunning()
	+abort()
	+isActive()
	-__ctor()
	+sleep()
	-__dtor()
}
Script --> ScriptThread
class ScriptThread {
	-_co : unmanaged
	+isActive()
	-_handleResumeResult()
	-__dtor()
	{static} -__type_name : string | "ScriptThread"
	-_startRunning()
	+start()
	+sleep()
	-_log()
	+isRunning()
	+abort()
	-_endRunning()
	-__ctor()
	+awake()
	-_handleYieldResule()
}
class SSL_Timing {
	-_time : number | 0
	-_time_spent : number | 0
	+check()
	+checkTimeOut()
	-__dtor()
	-__ctor()
	{static} -__super : IScriptSigLogic
	{static} -__type_name : string | "SSL_Timing"
}
IScriptSigLogic <|-- SSL_Timing 
@enduml