<?xml version="1.0" encoding="UTF-16"?>
<!-- This XML file has been created by WebEJS 1.0. Visit http://t.um.es/webejs -->
<!-- Please, open it with WebEJS or save the file to your hard disk on your EJS' user directory and open it with Desktop Ejs 6.01 or later. -->
<Osejs version="7.0" password="">
<Osejs.Information>
<Title><![CDATA[Arrange_Pupill_Math_Simulation]]></Title>
<Copyright><![CDATA[]]></Copyright>
<Keywords><![CDATA[]]></Keywords>
<Password><![CDATA[unused]]></Password>
<Level><![CDATA[]]></Level>
<Language><![CDATA[]]></Language>
<Abstract><![CDATA[]]></Abstract>
<FixedNavigationBar>false</FixedNavigationBar>
<RunAlways>true</RunAlways>
<UseInterpreter>true</UseInterpreter>
<UseDeltaForODE>false</UseDeltaForODE>
<PreviewFullModel>false</PreviewFullModel>
<ModelTab></ModelTab>
<ModelTabTitle><![CDATA[]]></ModelTabTitle>
<ModelName><![CDATA[]]></ModelName>
<CSSFile></CSSFile>
<HTMLHead><![CDATA[<script 
async="true" src="https://www.googletagmanager.com/gtag/js?id=G-S9EWRY1CPJ"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-S9EWRY1CPJ');
</script>]]></HTMLHead>
<SaveInXMLFormat>true</SaveInXMLFormat>
<IncludeSource>true</IncludeSource>
<IncludeLibrary>true</IncludeLibrary>
<UglifyJS>false</UglifyJS>
<Logo>./logo_room.png</Logo>
<Author><![CDATA[kangrui;lookang;meiyoke]]></Author>
<AuthorLogo>;;</AuthorLogo>
<DetectedFiles><![CDATA[./logo_room.png]]></DetectedFiles>
<AuxiliaryFiles><![CDATA[]]></AuxiliaryFiles>
</Osejs.Information>
<Osejs.Description>
</Osejs.Description>
<Osejs.Model>
<Osejs.Model.FramesPerSecond>20</Osejs.Model.FramesPerSecond>
<Osejs.Model.StepsPerDisplay>1</Osejs.Model.StepsPerDisplay>
<Osejs.Model.RealTimeVariable></Osejs.Model.RealTimeVariable>
<Osejs.Model.Autostart>true</Osejs.Model.Autostart>
<Osejs.Model.Variables>
<Osejs.Model.Variables.Page>
<Type>undefined</Type>
<Name>Var Table 1</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<PageComment><![CDATA[]]></PageComment>
<Variable>
<Name><![CDATA[scenarios]]></Name>
<Value><![CDATA[{}]]></Value>
<Type><![CDATA[Object]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[pupils]]></Name>
<Value><![CDATA[[]]]></Value>
<Type><![CDATA[Object]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[selectedScenario]]></Name>
<Value><![CDATA["Scenario A"]]></Value>
<Type><![CDATA[String]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[roomX]]></Name>
<Value><![CDATA[[]]]></Value>
<Type><![CDATA[Object]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[roomY]]></Name>
<Value><![CDATA[[]]]></Value>
<Type><![CDATA[Object]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[pupilX]]></Name>
<Value><![CDATA[[]]]></Value>
<Type><![CDATA[Object]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[pupilY]]></Name>
<Value><![CDATA[[]]]></Value>
<Type><![CDATA[Object]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[roomImage]]></Name>
<Value><![CDATA[[]]]></Value>
<Type><![CDATA[Object]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[pupilImage]]></Name>
<Value><![CDATA[[]]]></Value>
<Type><![CDATA[Object]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[roomText]]></Name>
<Value><![CDATA[[]]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[textX]]></Name>
<Value><![CDATA[[]]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[textY]]></Name>
<Value><![CDATA[[]]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[selectedPupil]]></Name>
<Value><![CDATA[-1]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[pastAttemptsByScenario]]></Name>
<Value><![CDATA[{}]]></Value>
<Type><![CDATA[Object]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
<Variable>
<Name><![CDATA[]]></Name>
<Value><![CDATA[]]></Value>
<Type><![CDATA[double]]></Type>
<Dimension><![CDATA[]]></Dimension>
<Domain><![CDATA[]]></Domain>
<Comment><![CDATA[]]></Comment>
</Variable>
</Content>
</Osejs.Model.Variables.Page>
</Osejs.Model.Variables>
<Osejs.Model.Initialization>
<Osejs.Model.Initialization.Page>
<Type>undefined</Type>
<Name>scenarios</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[
scenarios  = {
    "Scenario A": {
        scenario: "There are 18 pupils and there are 5 rooms. Each room cannot take more than 4 pupils. How should I arrange them?",
        pupils: 18,
        rooms: [
          {
            room: "Music Room",
            image: "Room.png",
            max: 40,
            min: 1,
          },
          {
            room: "Science Room",
            image: "Room.png",
            max: 4,
            min: 1,
          },
          {
            room: "Computer Room",
            image: "Room.png",
            max: 4,
            min: 1,
          },
          {
            room: "Art Room",
            image: "Room.png",
            max: 4,
            min: 1,
          },
          {
            room: "Math Room",
            image: "Room.png",
            max: 4,
            min: 1,
          },
        ],
    },
     "Scenario B": {
        scenario: "There are 16 pupils and there are 4 rooms. Each room cannot take more than 4 pupils. How should I arrange them?",
        pupils: 16,
        rooms: [
          {
            room: "Music Room",
            image: "Room.png",
            max: 4,
            min: 1,
          },
          {
            room: "Science Room",
            image: "Room.png",
            max: 4,
            min: 1,
          },
          {
            room: "Computer Room",
            image: "Room.png",
            max: 4,
            min: 1,
          },
          {
            room: "Art Room",
            image: "Room.png",
            max: 4,
            min: 1,
          },
        ],
    }
}
]]></Code>
</Content>
</Osejs.Model.Initialization.Page>
<Osejs.Model.Initialization.Page>
<Type>CODE_EDITOR</Type>
<Name>pupils</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[
pupils = [
    {
        image: "Pupil.png",
    },
    {
        image: "Pupil.png",
    },
    {
        image: "Pupil.png",
    },
    {
        image: "Pupil.png",
    },
    {
        image: "Pupil.png",
    },
    {
        image: "Pupil.png",
    },
    {
        image: "Pupil.png",
    },
    {
        image: "Pupil.png",
    },
    {
        image: "Pupil.png",
    },
    {
        image: "Pupil.png",
    },
    {
        image: "Pupil.png",
    },
    {
        image: "Pupil.png",
    },
    {
        image: "Pupil.png",
    },
    {
        image: "Pupil.png",
    },
    {
        image: "Pupil.png",
    },
    {
        image: "Pupil.png",
    },
    {
        image: "Pupil.png",
    },
    {
        image: "Pupil.png",
    },
]
]]></Code>
</Content>
</Osejs.Model.Initialization.Page>
<Osejs.Model.Initialization.Page>
<Type>CODE_EDITOR</Type>
<Name>init</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[
initRooms();
initPupils();
]]></Code>
</Content>
</Osejs.Model.Initialization.Page>
</Osejs.Model.Initialization>
<Osejs.Model.Evolution>
</Osejs.Model.Evolution>
<Osejs.Model.Constraints>
</Osejs.Model.Constraints>
<Osejs.Model.Library>
<Osejs.Model.Library.Page>
<Type>undefined</Type>
<Name>initFunctions</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[
function initRooms() {
    scenarios[selectedScenario].rooms.forEach(room => room.count = 0);
    roomX = [];
    roomY = [];
    roomImage = [];
    textX = [];
    textY = [];
    roomText = [];

    let numOfRooms = scenarios[selectedScenario].rooms.length;
    let currentY = 0.85;  
    let roomIndex = 0;

    while (roomIndex < numOfRooms) {
        let roomsInRow = Math.min(3, numOfRooms - roomIndex);
        let xCoords;

        if (roomsInRow === 1) {
            xCoords = [0.5];  
        } else if (roomsInRow === 2) {
            xCoords = [0.3, 0.7]; 
        } else {
            xCoords = [0.15, 0.5, 0.85]; 
        }

        for (let i = 0; i < roomsInRow; i++) {
            roomX.push(xCoords[i]);
            roomY.push(currentY);
            scenarios[selectedScenario].rooms[roomIndex].x = xCoords[i];
            scenarios[selectedScenario].rooms[roomIndex].y = currentY;
            roomImage.push(scenarios[selectedScenario].rooms[roomIndex].image);  
            textX.push(xCoords[i]);
            textY.push(currentY - 0.15);
            roomText.push(scenarios[selectedScenario].rooms[roomIndex].room);
            roomIndex++;
        }

        currentY -= 0.3;
    }
}

function initPupils() {
    pupils.forEach(pupil => pupil.room = '');
    pupilX = [];
    pupilY = [];
    pupilImage = [];

    let numOfPupils = scenarios[selectedScenario].pupils;
    let currentY = 0.25;
    let pupilIndex = 0;


   while (pupilIndex < numOfPupils) {
        let pupilsInRow = Math.min(9, numOfPupils - pupilIndex);  
        let xCoords = [];
    
        for (let i = 0; i < pupilsInRow; i++) {
            xCoords.push((i + 1) / 10);  
        }
    
        for (let i = 0; i < pupilsInRow; i++) {
            pupilX.push(xCoords[i]);
            pupilY.push(currentY);
            pupils[pupilIndex].x = xCoords[i];
            pupils[pupilIndex].y = currentY;
            pupilImage.push(pupils[pupilIndex].image);  
            pupilIndex++;
        }
    
        currentY -= 0.1; 
    }
}
]]></Code>
</Content>
</Osejs.Model.Library.Page>
<Osejs.Model.Library.Page>
<Type>CODE_EDITOR</Type>
<Name>onRelease</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[
function onRelease(x, y, index) {
    let rooms = scenarios[selectedScenario].rooms;
    let currentRoomName = pupils[index].room;

    if (currentRoomName) {
        for (let i = 0; i < rooms.length; i++) {
            let room = rooms[i];
            let roomX = room.x;
            let roomY = room.y;
            let halfSize = 0.15;

            if (room.room === currentRoomName && x >= roomX - halfSize && x <= roomX + halfSize && y >= roomY - halfSize && y <= roomY + halfSize) {
                return;
            }
        }

        for (let i = 0; i < rooms.length; i++) {
            if (rooms[i].room === currentRoomName && rooms[i].hasOwnProperty('count')) {
                rooms[i].count -= 1;
                pupils[index].room = '';
                break;
            }
        }
    }

    for (let i = 0; i < rooms.length; i++) {
        let room = rooms[i];
        let roomX = room.x;
        let roomY = room.y;
        let halfSize = 0.15;

        if (x >= roomX - halfSize && x <= roomX + halfSize && y >= roomY - halfSize && y <= roomY + halfSize) {
            if (!room.hasOwnProperty('count')) {
                room.count = 0;
            }

            pupils[index].room = room.room;
            room.count += 1;
        }
    }
}

]]></Code>
</Content>
</Osejs.Model.Library.Page>
<Osejs.Model.Library.Page>
<Type>CODE_EDITOR</Type>
<Name>check</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[
function check() {
    let checkCount = 0;
    let currentAttempt = [];

    scenarios[selectedScenario].rooms.forEach(room => {
        checkCount += room.count;
        currentAttempt.push(`${room.room}: ${room.count} pupils`);
    });

    if (checkCount != scenarios[selectedScenario].pupils) {
        alert("Incorrect. Try Again!");
        return;
    }

    for (let room of scenarios[selectedScenario].rooms) {
        if (room.count < room.min || room.count > room.max) {
            alert("Incorrect. Try Again!");
            return;
        }
    }

    if (!pastAttemptsByScenario[selectedScenario]) {
        pastAttemptsByScenario[selectedScenario] = [];
    }

    alert("Congrats! You did it, now try a different approach or a different scenario!")
    pastAttemptsByScenario[selectedScenario].push(currentAttempt);
    displayPastAnswers();
    reset();
}

function displayPastAnswers() {
    const pastAnswersDiv = document.getElementById("pastAttempts");
    pastAnswersDiv.innerHTML = "";

    for (let scenario in pastAttemptsByScenario) {
        let scenarioDiv = document.createElement("div");
        scenarioDiv.innerHTML = `<h3 style="margin: 0; font-size: 18px; font-weight: bold;">${scenario}:</h3>`;

        let attemptsContainer = document.createElement("div");
        attemptsContainer.style.display = "flex";
        attemptsContainer.style.flexWrap = "wrap";

        pastAttemptsByScenario[scenario].forEach((attempt, index) => {
            let attemptDiv = document.createElement("div");
            attemptDiv.innerHTML = `<strong style="font-size: 16px;">Attempt ${index + 1}:</strong><br>${attempt.join('<br>')}`;
            attemptDiv.style.padding = "10px";
            attemptDiv.style.width = "200px";
            attemptDiv.style.textAlign = "left";
            attemptsContainer.appendChild(attemptDiv);
        });

        scenarioDiv.appendChild(attemptsContainer);
        pastAnswersDiv.appendChild(scenarioDiv);
    }
}

]]></Code>
</Content>
</Osejs.Model.Library.Page>
<Osejs.Model.Library.Page>
<Type>CODE_EDITOR</Type>
<Name>reset</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[
function reset() {
    initRooms();
    initPupils();
}
]]></Code>
</Content>
</Osejs.Model.Library.Page>
<Osejs.Model.Library.Page>
<Type>CODE_EDITOR</Type>
<Name>lookang</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[
// lookang

function autoSolve() {
    let numOfPupils = scenarios[selectedScenario].pupils;
    let rooms = scenarios[selectedScenario].rooms;

    // Reset rooms' counts and assigned pupils
    rooms.forEach(room => {
        room.count = 0;
        room.assignedPupils = 0;
    });

    // Initialize room counts to their minimum capacity
    rooms.forEach(room => {
        room.count = room.min;
    });

    // Calculate the total number of pupils already assigned
    let assignedPupils = rooms.reduce((sum, room) => sum + room.count, 0);

    // Calculate the number of pupils left to assign
    let remainingPupils = numOfPupils - assignedPupils;

    // Distribute remaining pupils while respecting room capacities
    while (remainingPupils > 0) {
        let assignedInThisIteration = false;
        for (let room of rooms) {
            if (room.count < room.max) {
                room.count += 1;
                remainingPupils -= 1;
                assignedInThisIteration = true;
                if (remainingPupils === 0) break;
            }
        }
        if (!assignedInThisIteration) {
            alert("Cannot find a valid assignment with the given constraints.");
            return;
        }
    }

    // Prepare an array of room names based on the final counts
    let roomAssignments = [];
    rooms.forEach(room => {
        for (let i = 0; i < room.count; i++) {
            roomAssignments.push(room.room);
        }
        // Reset the count of assigned pupils for positioning
        room.assignedPupils = 0;
    });

    // Assign pupils to rooms and position them
    for (let i = 0; i < numOfPupils; i++) {
        pupils[i].room = roomAssignments[i];
        let room = rooms.find(r => r.room === pupils[i].room);

        // Calculate offsets to position pupils within the room
        let pupilsInRoom = room.assignedPupils;
        let xOffset = ((pupilsInRoom % 2) * 0.05) - 0.025; // Adjust for overlap
        let yOffset = (Math.floor(pupilsInRoom / 2) * 0.05) - 0.025;

        // Update pupil positions
        pupils[i].x = room.x + xOffset;
        pupils[i].y = room.y + yOffset;
        room.assignedPupils += 1;
    }

    // Clear any extra pupils not used in this scenario
    for (let i = numOfPupils; i < pupils.length; i++) {
        pupils[i].room = '';
        pupils[i].x = pupils[i].initialX;
        pupils[i].y = pupils[i].initialY;
    }

    // Update the arrays used for rendering
    pupilX = pupils.map(p => p.x);
    pupilY = pupils.map(p => p.y);

    // Optionally, update the room counts displayed in the UI
    updateRoomCounts();

    // Re-render the simulation if necessary
    // This depends on how your simulation handles rendering
}

]]></Code>
</Content>
</Osejs.Model.Library.Page>
<Osejs.Model.Library.Page>
<Type>CODE_EDITOR</Type>
<Name>lookang2</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<Comment><![CDATA[]]></Comment>
<Code><![CDATA[
// lookang2
function updateRoomCounts() {
    // Loop through rooms and update the UI elements displaying counts
    scenarios[selectedScenario].rooms.forEach(room => {
        let roomCountElement = document.getElementById(`count-${room.room}`);
        if (roomCountElement) {
            roomCountElement.textContent = `Pupils: ${room.count}`;
        }
    });
}

]]></Code>
</Content>
</Osejs.Model.Library.Page>
</Osejs.Model.Library>
<Osejs.Model.Elements>
</Osejs.Model.Elements>
</Osejs.Model>
<Osejs.HtmlView>
<Osejs.HtmlView.Page>
<Type>HTML_VIEW_EDITOR</Type>
<Name>HtmlView</Name>
<Active>true</Active>
<Internal>false</Internal>
<Content>
<SizeOption>0</SizeOption>
<X>0</X>
<Y>0</Y>
<Width>800</Width>
<Height>600</Height>
<KeepHidden>true</KeepHidden>
<RootProperties>
</RootProperties>
<Tree>
<HtmlView.Element>
<Expanded>true</Expanded>
<Type>Elements.Panel</Type>
<Name><![CDATA[wrapper]]></Name>
</HtmlView.Element>
<HtmlView.Element>
<Expanded>true</Expanded>
<Type>Elements.Panel</Type>
<Name><![CDATA[firstRow]]></Name>
<Parent><![CDATA[wrapper]]></Parent>
<Property name="CSS"><![CDATA["{
margin-bottom: 10px
}"]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.Label</Type>
<Name><![CDATA[currentScenario]]></Name>
<Parent><![CDATA[firstRow]]></Parent>
<Property name="Text"><![CDATA[scenarios[selectedScenario].scenario]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Expanded>true</Expanded>
<Type>Elements.Panel</Type>
<Name><![CDATA[secondRow]]></Name>
<Parent><![CDATA[wrapper]]></Parent>
<Property name="CSS"><![CDATA["{ margin-bottom: 10px }"]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.ComboBox</Type>
<Name><![CDATA[selectScenario]]></Name>
<Parent><![CDATA[secondRow]]></Parent>
<Property name="Options"><![CDATA[["Scenario A", "Scenario B"]]]></Property>
<Property name="OnChange"><![CDATA[var opts = _view.selectScenario.getProperty("SelectedOptions");  
selectedScenario = (opts.length > 0)? opts[0]:"";
initRooms();
initPupils();]]></Property>
<Property name="CSS"><![CDATA["{ margin-right: 10px }"]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.Button</Type>
<Name><![CDATA[check]]></Name>
<Parent><![CDATA[secondRow]]></Parent>
<Property name="Text"><![CDATA["Check"]]></Property>
<Property name="OnPress"><![CDATA[check()]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.Button</Type>
<Name><![CDATA[solve]]></Name>
<Parent><![CDATA[secondRow]]></Parent>
<Property name="Text"><![CDATA["Solve"]]></Property>
<Property name="OnPress"><![CDATA[autoSolve()]]></Property>
<Property name="Display"><![CDATA["none"]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Expanded>true</Expanded>
<Type>Elements.PlottingPanel</Type>
<Name><![CDATA[plottingPanel]]></Name>
<Parent><![CDATA[wrapper]]></Parent>
<Property name="Width"><![CDATA["100%"]]></Property>
<Property name="Height"><![CDATA["90vh"]]></Property>
<Property name="Enabled"><![CDATA[true]]></Property>
<Property name="Gutters"><![CDATA[[0,0,0,0]]]></Property>
<Property name="AutoScaleY"><![CDATA[false]]></Property>
<Property name="AutoScaleX"><![CDATA[false]]></Property>
<Property name="MaximumX"><![CDATA[1]]></Property>
<Property name="MinimumX"><![CDATA[0]]></Property>
<Property name="MinimumY"><![CDATA[0]]></Property>
<Property name="MaximumY"><![CDATA[1]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.ImageSet2D</Type>
<Name><![CDATA[roomSets]]></Name>
<Parent><![CDATA[plottingPanel]]></Parent>
<Property name="NumberOfElements"><![CDATA[scenarios[selectedScenario].rooms.length]]></Property>
<Property name="Sensitivity"><![CDATA[0]]></Property>
<Property name="SizeX"><![CDATA[0.3]]></Property>
<Property name="SizeY"><![CDATA[0.3]]></Property>
<Property name="X"><![CDATA[roomX]]></Property>
<Property name="Y"><![CDATA[roomY]]></Property>
<Property name="ImageUrl"><![CDATA[roomImage]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.TextSet2D</Type>
<Name><![CDATA[roomNameSets]]></Name>
<Parent><![CDATA[plottingPanel]]></Parent>
<Property name="NumberOfElements"><![CDATA[scenarios[selectedScenario].rooms.length]]></Property>
<Property name="X"><![CDATA[textX]]></Property>
<Property name="Y"><![CDATA[textY]]></Property>
<Property name="Text"><![CDATA[roomText]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.ImageSet2D</Type>
<Name><![CDATA[pupilSets]]></Name>
<Parent><![CDATA[plottingPanel]]></Parent>
<Property name="NumberOfElements"><![CDATA[scenarios[selectedScenario].pupils]]></Property>
<Property name="X"><![CDATA[pupilX]]></Property>
<Property name="Y"><![CDATA[pupilY]]></Property>
<Property name="SizeX"><![CDATA[0.07]]></Property>
<Property name="SizeY"><![CDATA[0.07]]></Property>
<Property name="Sensitivity"><![CDATA[0]]></Property>
<Property name="EnabledPosition"><![CDATA["ENABLED_ANY"]]></Property>
<Property name="ImageUrl"><![CDATA[pupilImage]]></Property>
<Property name="ElementInteracted"><![CDATA[selectedPupil]]></Property>
<Property name="OnRelease"><![CDATA[onRelease(pupilX[selectedPupil], pupilY[selectedPupil],selectedPupil)]]></Property>
</HtmlView.Element>
<HtmlView.Element>
<Type>Elements.Panel</Type>
<Name><![CDATA[pastAttempts]]></Name>
<Parent><![CDATA[wrapper]]></Parent>
<Property name="ClassName"><![CDATA["pastAttempts"]]></Property>
<Property name="CSS"><![CDATA["{text-align: left}"]]></Property>
</HtmlView.Element>
</Tree>
</Content>
</Osejs.HtmlView.Page>
</Osejs.HtmlView>
</Osejs>