import expyriment
n_block = 3
n_trial = 5
dur = 1000
Intruksi = "Tekan x jika emosi negatif. Tekan m jika emosi positif.\n\
            Jika sudah siap tekan space"
# note x = 120, m = 109, global setting
exp = expyriment.design.Experiment(name="Emotion Recognition Ability")
expyriment.control.initialize(exp)

pictures = {"anger": expyriment.stimuli.Picture("G:/My-Jobs/Py/Imej/Anger_Jap.jpg"),
            "sad": expyriment.stimuli.Picture("G:/My_Jobs/Py/Imej/Sad_Asian.jpg"),
            "happy":expyriment.stimuli.Picture("G:/My_Jobs/Py/Imej/Happy_Jap.jpg"),
            "fear": expyriment.stimuli.Picture("G:/My_Jobs/Py/Imej/Fear_Chinese.jpg"),
            "joy": expyriment.stimuli.Picture("G:/My_Jobs/Py/Imej/Joy_Jap.jpg")}
for picture in pictures:
    pictures[picture].preload()
# Loading semua stimuli
for emotion_type, emotions in {"negative": ["anger", "sad", "fear"], "positive": ["happy", "joy"]}.iteritems():   # use iteritems() in Python 2
    for block in range(n_block):
        tem_block = expyriment.design.Block(name="1")
        tem_block.set_factor("EmotionType", emotion_type)
        for trial_repetition in range(n_trial):
            tem_trial = expyriment.design.Trial()
            emotion = expyriment.design.randomize.rand_element(emotions)
            tem_trial.add_stimulus(pictures[emotion])
            for emotion in emotions:
                if emotion == "anger":
                    respon_betul = 120
                elif emotion == "sad":
                    respon_betul = 120
                elif emotion == "happy":
                    respon_betul = 109
                elif emotion == "fear":
                    respon_betul = 120
                else:
                    respon_betul = 109
            tem_trial.set_factor("Emotion", emotion)
            tem_trial.set_factor("respon_betul",respon_betul)
            tem_block.add_trial(tem_trial)
        # men-shuffle trial tiap block
        tem_block.shuffle_trials()
        exp.add_block(tem_block)
    
exp.data_variable_names = ["EmotionType", "trial_id", "keypres", "respon_betul", "RT",
                           "akurasi", "Emotion"]    

expyriment.control.start(skip_ready_screen=True)
fixation_cross = expyriment.stimuli.FixCross()
fixation_cross.preload()
expyriment.stimuli.TextScreen("Emotion Recognition", Intruksi).present()
exp.keyboard.wait(expyriment.misc.constants.K_SPACE)

for block in exp.blocks:
    for trial in block.trials:
        trial.stimuli[0].preload()
        fixation_cross.present()
        exp.clock.wait(dur)
        trial.stimuli[0].present()
        exp.clock.reset_stopwatch()
        key, rt = exp.keyboard.wait([expyriment.misc.constants.K_x,
                                     expyriment.misc.constants.K_m])
        exp.clock.wait(dur - exp.clock.stopwatch_time)
        if key == trial.get_factor('respon_betul'):
            acc = 1
        else:
            acc = 0
        exp.data.add([block.name, trial.id, key, trial.get_factor('respon_betul')
                      ,rt, acc, trial.get_factor("Emotion")])
        # name block sequences
        if block.name != "3":
            expyriment.stimuli.TextScreen("Break Dulu", "Tadi Block Ke: " 
                                        + block.name + 
                                        ". \n Block selanjutnya dimulai ",
                                        ).present()
            exp.clock.wait(2500)
        else:
            expyriment.stimuli.TextScreen("End of Stimuli", "Tadi Block Ke: "
                                          + block.name).present()
            exp.clock.wait(2500)
# Done!!
expyriment.control.end(goodbye_text="Thankss!",goodbye_delay=2000)

