<commit_before>define (require) ->

    Entity = require 'cs!game/core/Entity'
    Keyboard = require 'cs!game/core/Keyboard'
    
    class Game extends Entity
        # Constructeur
        constructor: (@config) ->
            
            @game = @
            @canvas = document.getElementById('canvas')
            @ctx = @canvas.getContext('2d')
            
            super @
            
            # Dimensions
            @width = @canvas.width
            @height = @canvas.height
            
            # Temps écoulé depuis le démarrage du jeu
            @t = 0
            
            # Images, sons, etc.
            @assets = {}
            
            # Représentation du clavier
            @keyboard = new Keyboard @
            
            # Scenes
            @scenes = {}
            
            # Scene actuelle
            @scene = null
            
            # Pause
            @pause = no
        
        # Démarrer le jeu
        start: ->
            # Application des écouteurs clavier
            window.addEventListener 'keydown', (e) => @handleKeyDown(e)
            window.addEventListener 'keyup', (e) => @handleKeyUp(e)
            
            # Changement de la visibilité de la fenêtre
            document.addEventListener "visibilitychange", => @handleVisibilityChange(not document.hidden)
            
            # File de chargement des assets
            loadQueue = new createjs.LoadQueue()
            loadQueue.loadManifest(@config.assetsManifest, false, @config.assetsBasePath)

            # A la fin du chargement, lancer le jeu
            loadQueue.on "complete", (e) => @handleLoadComplete(e)
            loadQueue.on "progress", (e) => @handleLoadProgress(e)
            loadQueue.on "fileload", (e) => @handleFileLoad(e)

            # Lancement du chargement
            @scenes.loading.handleStart()
            loadQueue.load()
            
            # Création du ticker
            dt = 0
            lastTime = (new Date).getTime()
            anim = =>
                now = (new Date).getTime()
                dt = now - lastTime
                lastTime = now
                @handleUpdate(dt / 1000)
                window.requestAnimationFrame anim
            
            window.requestAnimationFrame anim
            
        
        # Mise à jour du jeu puis de l'affichage
        handleUpdate: (dt) ->
            if not @pause
                @t += dt
                @scene.handleUpdate(dt) if @scene
            
            @scene.handleDraw(@ctx) if @scene
        
        # Lors de l'appui sur une touche
        handleKeyDown: (event) ->
            event.preventDefault() if event.keyCode < 100
            @keyboard.keys[event.keyCode] = true
            @scene.handleKeyDown(event) if @scene

        # Lors du relâchement d'une touche
        handleKeyUp: (event) ->
            @keyboard.keys[event.keyCode] = false
            @scene.handleKeyUp(event) if @scene
        
        # Lors changement de visibilité de la fenêtre
        handleVisibilityChange: (visible) ->
            @pause = yes if not visible
        
        # Progression du chargement<commit_msg>Correction du mode pause bloqué par le changement d'onglet<commit_after>define (require) ->

    Entity = require 'cs!game/core/Entity'
    Keyboard = require 'cs!game/core/Keyboard'
    
    class Game extends Entity
        # Constructeur
        constructor: (@config) ->
            
            @game = @
            @canvas = document.getElementById('canvas')
            @ctx = @canvas.getContext('2d')
            
            super @
            
            # Dimensions
            @width = @canvas.width
            @height = @canvas.height
            
            # Temps écoulé depuis le démarrage du jeu
            @t = 0
            
            # Images, sons, etc.
            @assets = {}
            
            # Représentation du clavier
            @keyboard = new Keyboard @
            
            # Scenes
            @scenes = {}
            
            # Scene actuelle
            @scene = null
            
            # Pause
            @pause = no
        
        # Démarrer le jeu
        start: ->
            # Application des écouteurs clavier
            window.addEventListener 'keydown', (e) => @handleKeyDown(e)
            window.addEventListener 'keyup', (e) => @handleKeyUp(e)
            
            # Changement de la visibilité de la fenêtre
            document.addEventListener "visibilitychange", => @handleVisibilityChange(not document.hidden)
            
            # File de chargement des assets
            loadQueue = new createjs.LoadQueue()
            loadQueue.loadManifest(@config.assetsManifest, false, @config.assetsBasePath)

            # A la fin du chargement, lancer le jeu
            loadQueue.on "complete", (e) => @handleLoadComplete(e)
            loadQueue.on "progress", (e) => @handleLoadProgress(e)
            loadQueue.on "fileload", (e) => @handleFileLoad(e)

            # Lancement du chargement
            @scenes.loading.handleStart()
            loadQueue.load()
            
            # Création du ticker
            dt = 0
            lastTime = (new Date).getTime()
            anim = =>
                now = (new Date).getTime()
                dt = now - lastTime
                lastTime = now
                @handleUpdate(dt / 1000)
                window.requestAnimationFrame anim
            
            window.requestAnimationFrame anim
            
        
        # Mise à jour du jeu puis de l'affichage
        handleUpdate: (dt) ->
            if not @pause
                @t += dt
                @scene.handleUpdate(dt) if @scene
            
            @scene.handleDraw(@ctx) if @scene
        
        # Lors de l'appui sur une touche
        handleKeyDown: (event) ->
            event.preventDefault() if event.keyCode < 100
            @keyboard.keys[event.keyCode] = true
            @scene.handleKeyDown(event) if @scene

        # Lors du relâchement d'une touche
        handleKeyUp: (event) ->
            @keyboard.keys[event.keyCode] = false
            @scene.handleKeyUp(event) if @scene
        
        # Lors changement de visibilité de la fenêtre
        handleVisibilityChange: (visible) ->
            @pause = not visible
        
        # Progression du chargement
{'fraction_non_alphanumeric': 0.08602319022250078, 'fraction_numerical': 0.0031338138514572234, 'mean_word_length': 1.3423853211009174, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 31, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3185779', 'n_tokens_mistral': 1666, 'n_tokens_neox': 1639, 'n_words': 419}