<?xml version='1.0' encoding='utf-8'?>
<root version="20190819">
    <world>
        <walls>
            <wall end="400:100" fill="#ff000000" stroke-style="none" stroke-width="10" begin="400:-50" id="{8af5ba1b-fe48-4790-a038-145d2e2922af}" stroke="#ff000000"/>
        </walls>
        <skittles/>
        <balls/>
        <colorFields>
            <rectangle fill-style="none" end="-493:112" fill="#ff000000" stroke-style="solid" stroke-width="6" begin="-493:112" id="{bc65be68-bff5-4627-ae7b-967407b498db}" stroke="#ff000000"/>
        </colorFields>
        <images/>
        <regions/>
    </world>
    <robots>
        <robot id="trikKitRobot" position="272:0" direction="0">
            <sensors>
                <sensor port="A1###input###А1###sensorA1" position="75:25" type="trik::robotModel::parts::TrikInfraredSensor" direction="0"/>
            </sensors>
            <startPosition y="25" x="25" direction="0" id="{9e4b9794-e98a-4d46-a521-020a8946ac3e}"/>
            <wheels left="M4###output###М4###" right="M3###output###М3###"/>
        </robot>
    </robots>
    <settings realisticPhysics="false" realisticSensors="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"/>
				<setUp id="success 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>
            <trigger>
                <setUp id="long checker"/>
            </trigger>
        </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">
				<notLess>
					<objectState object="robot1.A1.value"/>
					<int value="42"/>
				</notLess>
				<notGreater>
					<objectState object="robot1.A1.value"/>
					<int value="38"/>
				</notGreater>
            </conditions>
            <trigger>
                <setUp id="word checker"/>
            </trigger>
        </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 small 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>
