Thanks again
/*****************
* Untitled Test *
*****************/
import { PsychoJS } from './lib/core-3.0.0b9.js';
import * as core from './lib/core-3.0.0b9.js';
import { TrialHandler } from './lib/data-3.0.0b9.js';
import { Scheduler } from './lib/util-3.0.0b9.js';
import * as util from './lib/util-3.0.0b9.js';
import * as visual from './lib/visual-3.0.0b9.js';
// init psychoJS:
var psychoJS = new PsychoJS({
debug: true
});
// open window:
psychoJS.openWindow({
fullscr: true,
color: new util.Color([0, 0, 0]),
units: 'use prefs'
});
// store info about the experiment session:
let expName = 'untitled'; // from the Builder filename that created this script
let expInfo = {'participant': '', 'session': '001'};
// schedule the experiment:
psychoJS.schedule(psychoJS.gui.DlgFromDict({
dictionary: expInfo,
title: expName
}));
const flowScheduler = new Scheduler(psychoJS);
const dialogCancelScheduler = new Scheduler(psychoJS);
psychoJS.scheduleCondition(function() { return (psychoJS.gui.dialogComponent.button === 'OK'); }, flowScheduler, dialogCancelScheduler);
// flowScheduler gets run if the participants presses OK
flowScheduler.add(updateInfo); // add timeStamp
flowScheduler.add(experimentInit);
flowScheduler.add(trialRoutineBegin);
flowScheduler.add(trialRoutineEachFrame);
flowScheduler.add(trialRoutineEnd);
flowScheduler.add(quitPsychoJS);
// quit if user presses Cancel in dialog box:
dialogCancelScheduler.add(quitPsychoJS);
psychoJS.start({configURL: 'config.json', expInfo: expInfo});
var frameDur;
function updateInfo() {
expInfo['date'] = util.MonotonicClock.getDateStr(); // add a simple timestamp
expInfo['expName'] = expName;
// store frame rate of monitor if we can measure it successfully
expInfo['frameRate'] = psychoJS.window.getActualFrameRate();
if (typeof expInfo['frameRate'] !== 'undefined')
frameDur = 1.0/Math.round(expInfo['frameRate']);
else
frameDur = 1.0/60.0; // couldn't get a reliable measure so guess
// add info from the URL:
util.addInfoFromUrl(expInfo);
return Scheduler.Event.NEXT;
}
var trialClock;
var image;
var mouse;
var globalClock;
var routineTimer;
function experimentInit() {
// Initialize components for Routine "trial"
trialClock = new util.Clock();
image = new visual.ImageStim({
win : psychoJS.window,
name : 'image',
image : 'picture1.png', mask : undefined,
ori : 0, pos : [0, 0], size : [0.5, 0.5],
color : new util.Color ([1, 1, 1]), opacity : 1,
flipHoriz : false, flipVert : false,
texRes : 128, interpolate : true, depth : 0.0
});
mouse = new core.Mouse({
win: psychoJS.window,
});
mouse.mouseClock = new util.Clock();
// Create some handy timers
globalClock = new util.Clock(); // to track the time since experiment started
routineTimer = new util.CountdownTimer(); // to track time remaining of each (non-slip) routine
return Scheduler.Event.NEXT;
}
var t;
var frameN;
var gotValidClick;
var trialComponents;
function trialRoutineBegin() {
//------Prepare to start Routine 'trial'-------
t = 0;
trialClock.reset(); // clock
frameN = -1;
// update component parameters for each repeat
// setup some python lists for storing info about the mouse
mouse.clicked_name = [];
gotValidClick = false; // until a click is received
image.setPos([0, 0])
// keep track of which components have finished
trialComponents = [];
trialComponents.push(image);
trialComponents.push(mouse);
for (const thisComponent of trialComponents)
if ('status' in thisComponent)
thisComponent.status = PsychoJS.Status.NOT_STARTED;
return Scheduler.Event.NEXT;
}
var continueRoutine;
function trialRoutineEachFrame() {
//------Loop for each frame of Routine 'trial'-------
let continueRoutine = true; // until we're told otherwise
// get current time
t = trialClock.getTime();
frameN = frameN + 1;// number of completed frames (so 0 is the first frame)
// update/draw components on each frame
// *image* updates
if (t >= 0.0 && image.status === PsychoJS.Status.NOT_STARTED) {
// keep track of start time/frame for later
image.tStart = t; // (not accounting for frame time here)
image.frameNStart = frameN; // exact frame index
image.setAutoDraw(true);
}
for (let blockName in mouse.clicked_image) {
if (mouse.clicked_image[blockName] == image.image) {
image.setPos([1, 1]);
}
}
// check if the Routine should terminate
if (!continueRoutine) { // a component has requested a forced-end of Routine
return Scheduler.Event.NEXT;
}
continueRoutine = false;// reverts to True if at least one component still running
for (const thisComponent of trialComponents)
if ('status' in thisComponent && thisComponent.status != PsychoJS.Status.FINISHED) {
continueRoutine = true;
break;
}
// check for quit (the Esc key)
if (psychoJS.experiment.experimentEnded || psychoJS.eventManager.getKeys({keyList:['escape']}).length > 0) {
psychoJS.quit('The [Escape] key was pressed. Goodbye!');
}
// refresh the screen if continuing
if (continueRoutine) {
return Scheduler.Event.FLIP_REPEAT;
}
else {
return Scheduler.Event.NEXT;
}
}
function trialRoutineEnd() {
//------Ending Routine 'trial'-------
for (const thisComponent of trialComponents) {
if (typeof thisComponent.setAutoDraw === 'function') {
thisComponent.setAutoDraw(false);
}
}
// store data for thisExp (ExperimentHandler)
// the Routine "trial" was not non-slip safe, so reset the non-slip timer
routineTimer.reset();
return Scheduler.Event.NEXT;
}
function endLoopIteration(thisTrial) {
// ------Prepare for next entry------
return function () {
if (typeof thisTrial === 'undefined' || !('isTrials' in thisTrial) || thisTrial.isTrials) {
psychoJS.experiment.nextEntry();
}
return Scheduler.Event.NEXT;
};
}
function importTrialAttributes(thisTrial) {
return function () {
psychoJS.importAttributes(thisTrial);
return Scheduler.Event.NEXT;
};
}
function quitPsychoJS() {
psychoJS.window.close();
psychoJS.quit();
return Scheduler.Event.QUIT;
}