protected override void Execute(LevelStateChanged msg)
 {
     if (map.NumOfJumpables == 1 && !_spawned && map.IsJumpable(new TilePoint(gameObject)))
     {
         Instantiate(dataCube, transform);
         _spawned = true;
     }
 }
 protected override void Execute(LevelStateChanged msg)
 {
     if (map.NumOfJumpables == 1 && !_spawned)
     {
         var heroTile = new TilePoint(map.Hero.gameObject);
         if (map.IsJumpable(new TilePoint(heroTile.X - 1, heroTile.Y)) && map.IsWalkable(new TilePoint(heroTile.X - 2, heroTile.Y)))
         {
             SpawnDataCube(new TilePoint(heroTile.X - 2, heroTile.Y));
         }
         if (map.IsJumpable(new TilePoint(heroTile.X + 1, heroTile.Y)) && map.IsWalkable(new TilePoint(heroTile.X + 2, heroTile.Y)))
         {
             SpawnDataCube(new TilePoint(heroTile.X + 2, heroTile.Y));
         }
         if (map.IsJumpable(new TilePoint(heroTile.X, heroTile.Y - 1)) && map.IsWalkable(new TilePoint(heroTile.X, heroTile.Y - 2)))
         {
             SpawnDataCube(new TilePoint(heroTile.X, heroTile.Y - 2));
         }
         if (map.IsJumpable(new TilePoint(heroTile.X, heroTile.Y + 1)) && map.IsWalkable(new TilePoint(heroTile.X, heroTile.Y + 2)))
         {
             SpawnDataCube(new TilePoint(heroTile.X, heroTile.Y + 2));
         }
     }
 }
 private bool IsConditionMet(TutorialCondition condition)
 {
     if (condition.Type == TutorialConditonType.RootPresent)
     {
         return(new TilePoint(map.Hero).Equals(condition.TilePoint) == condition.IsTrue);
     }
     if (condition.Type == TutorialConditonType.SubroutinePresent)
     {
         return(map.IsJumpable(condition.TilePoint) == condition.IsTrue);
     }
     if (condition.Type == TutorialConditonType.PieceSelected)
     {
         return(condition.IsTrue
             ? selectedPiece.Selected.IsPresentAnd(x => new TilePoint(x).Equals(condition.TilePoint))
             : !selectedPiece.Selected.IsPresent || !new TilePoint(selectedPiece.Selected.Value).Equals(condition.TilePoint));
     }
     if (condition.Type == TutorialConditonType.LevelHasReset)
     {
         return(hasLevelReset.Value == condition.IsTrue);
     }
     return(false);
 }
 public override bool IsPossible(MoveToRequested m) => m.To.InBetween(m.From).Count == 1 && map.IsJumpable(m.To.InBetween(m.From)[0]);