<?xml version='1.0' encoding='utf-8'?>
<root version="20190819">
    <world>
        <walls>
            <wall id="{8af5ba1b-fe48-4790-a038-145d2e2922af}" stroke="#ff000000" begin="400:-50" end="400:100" fill="#ff000000" stroke-width="10" stroke-style="none"/>
        </walls>
        <skittles/>
        <balls/>
        <colorFields>
            <rectangle id="{bc65be68-bff5-4627-ae7b-967407b498db}" stroke="#ff000000" begin="-493:112" end="-493:112" fill="#ff000000" stroke-width="6" fill-style="none" stroke-style="solid"/>
        </colorFields>
        <images/>
        <regions/>
    </world>
    <robots>
        <robot id="trikKitRobot" position="214:1" direction="0">
            <sensors>
                <sensor port="A1###input###А1###sensorA1" position="75:25" direction="0" type="trik::robotModel::parts::TrikInfraredSensor"/>
            </sensors>
            <startPosition id="{9230a471-c970-467f-85f2-97a96a8e26ef}" x="25" direction="0" y="25"/>
            <wheels left="M4###output###М4###" right="M3###output###М3###"/>
        </robot>
    </robots>
    <settings realisticSensors="false" realisticPhysics="false" realisticMotors="false"/>
    <constraints>
        <!-- Лимит времени. Обязательное ограничение -->
        <timelimit value="50000"/>
        <!-- Провека, что нет датчиков, кроме инфракрасного датчика расстояния-->
        <constraint checkOnce="true" failMessage="У робота не должно быть датчиков, кроме инфракрасного датчика расстояния">
            <conditions glue="and">
                <equals>
                    <typeOf objectId="robot1.A2"/>
                    <string value="undefined"/>
                </equals>
                <equals>
                    <typeOf objectId="robot1.A3"/>
                    <string value="undefined"/>
                </equals>
                <equals>
                    <typeOf objectId="robot1.A4"/>
                    <string value="undefined"/>
                </equals>
                <equals>
                    <typeOf objectId="robot1.A5"/>
                    <string value="undefined"/>
                </equals>
                <equals>
                    <typeOf objectId="robot1.A6"/>
                    <string value="undefined"/>
                </equals>
                <equals>
                    <typeOf objectId="robot1.D1"/>
                    <string value="undefined"/>
                </equals>
                <equals>
                    <typeOf objectId="robot1.D2"/>
                    <string value="undefined"/>
                </equals>
                <equals>
                    <typeOf objectId="robot1.F1"/>
                    <string value="undefined"/>
                </equals>
            </conditions>
        </constraint>
        <!-- Проверка, что на порт А1 установлен инфракрасный датчик расстояния -->
        <constraint checkOnce="true" failMessage="У робота должен быть установлен инфракрасный датчик расстояния на порту А1">
            <equals>
                <typeOf objectId="robot1.A1"/>
                <string value="twoDModel::robotModel::parts::RangeSensor"/>
            </equals>
        </constraint>
        <!-- Событие, запускающее цепочку проверок, если расстояние до стены меньше 38 -->
        <event id="close distance checker" settedUpInitially="true">
            <condition>
                <notGreater>
                    <objectState object="robot1.A1.value"/>
                    <int value="37"/>
                </notGreater>
            </condition>
            <triggers>
                <setUp id="small checker"/>
            </triggers>
        </event>
        <!-- Событие, проверяющее, что написано "Ближе нормы". Если нет, то выдает ошибку -->
        <event id="small checker">
            <conditions glue="and">
                <timer timeout="100" forceDropOnTimeout="true"/>
                <notEqual>
                    <objectState object="robot1.display.labels.first.text"/>
                    <string value="Ближе нормы"/>
                </notEqual>
            </conditions>
            <trigger>
                <fail message="Робот близко к стене, на экране должно быть написано «Ближе нормы»"/>
            </trigger>
        </event>
        <!-- Событие, запускающее цепочку проверок, если расстояние до стены больше 42 -->
        <event id="long distance checker" settedUpInitially="true">
            <condition>
                <notLess>
                    <objectState object="robot1.A1.value"/>
                    <int value="43"/>
                </notLess>
            </condition>
            <triggers>
                <setUp id="long checker"/>
            </triggers>
        </event>
        <!-- Событие, проверяющее, что на экран выведено "Дальше нормы". Если нет, то выдает ошибку -->
        <event id="long checker">
            <conditions glue="and">
                <timer timeout="100" forceDropOnTimeout="true"/>
                <notEqual>
                    <objectState object="robot1.display.labels.first.text"/>
                    <string value="Дальше нормы"/>
                </notEqual>
            </conditions>
            <trigger>
                <fail message="Робот далеко от стены, на экране должно быть написано «Дальше нормы»"/>
            </trigger>
        </event>
        <!-- Событие, запускающее цепочку проверок, если расстояние до стены от 38 до 42 -->
        <event id="middle distance checker" settedUpInitially="true">
            <conditions glue="and">
                <notGreater>
                    <objectState object="robot1.A1.value"/>
                    <int value="42"/>
                </notGreater>
                <notLess>
                    <objectState object="robot1.A1.value"/>
                    <int value="38"/>
                </notLess>
            </conditions>
            <triggers>
                <setUp id="word checker"/>
                <setUp id="success middle checker"/>
            </triggers>
        </event>
        <!-- Событие, проверяющее, что выведено слово "Норма". Если нет, то выдает ошибку -->
        <!-- Регистр букв слова важен-->
        <event id="word checker">
            <conditions glue="and">
                <timer timeout="100" forceDropOnTimeout="true"/>
                <notEqual>
                    <objectState object="robot1.display.labels.first.text"/>
                    <string value="Норма"/>
                </notEqual>
            </conditions>
            <trigger>
                <fail message="На экране должно отображаться слово «Норма». Регистр букв в слове важен."/>
            </trigger>
        </event>
        <!-- Событие, проверяющее, что выведено "Дальше нормы" в течении 2х секунд, тогда программа завершится успешно -->
        <event id="success middle checker">
            <conditions glue="and">
                <timer timeout="2000" forceDropOnTimeout="true"/>
                <equals>
                    <objectState object="robot1.display.labels.first.text"/>
                    <string value="Норма"/>
                </equals>
            </conditions>
            <trigger>
                <success/>
            </trigger>
        </event>
    </constraints>
</root>
