void Start()
    {
        string path = "Assets/SavedMaps/" + Mapname + ".txt";

        Tile[] tiles           = TilemapExtensions.GetTiles <Tile>(Tilemap);
        String serialMapString = "";
        int    cnt             = tiles.Length;

        foreach (Tile tile in tiles)
        {
            serialMapString = serialMapString + tile.sprite.name;
            if (--cnt != 0)
            {
                serialMapString = serialMapString + ";";
            }
            Debug.Log(serialMapString);
        }

        File.WriteAllText(path, string.Empty);


        StreamWriter writer = new StreamWriter(path, true);

        writer.Write(X + ";" + Y + ";");
        writer.Write(serialMapString);
        writer.Close();

        AssetDatabase.ImportAsset(path);
    }
Example #2
0
    public override void Pick(GridLayout gridLayout, GameObject brushTarget, BoundsInt position, Vector3Int pickStart)
    {
        Tilemap component = brushTarget.GetComponent <Tilemap>();

        if (component == null)
        {
            return;
        }

        base.Pick(gridLayout, brushTarget, position, pickStart);

        foreach (Vector3Int tilePosition in position.allPositionsWithin)
        {
            if (component.GetTile(tilePosition) == null)
            {
                continue;
            }
            TilemapExtensions.AutoSelectPaintTarget();
            return;
        }
    }
Example #3
0
    protected override void ScheduleAction()
    {
        player = GameManager.Instance.playerBehaviour;
        bool playerInRange = Vector3.Distance(transform.position, player.transform.position) < range;

        FacePlayer();

        if (!playerInRange)
        {
            return;
        }

        Debug.Log("SPITTER: Player in range!");

        Vector3 playerPosition = player.transform.position;

        attackDirection = Vector3.zero;
        // First check around the positions
        if (IsAbove(playerPosition, 0.05f, range))
        {
            attackDirection = new Vector3(0, 1f, 0);
        }
        else if (IsBelow(playerPosition, 0.05f, range))
        {
            attackDirection = new Vector3(0, -1f, 0);
        }
        else if (IsRight(playerPosition, 0.05f, range))
        {
            attackDirection = new Vector3(1f, 0, 0);
        }
        else if (IsLeft(playerPosition, 0.05f, range))
        {
            attackDirection = new Vector3(-1f, 0, 0);
        }

        Debug.Log("SPITTER: attack direction " + attackDirection);

        //else
        //{
        //    Vector3[] choices = { new Vector3(1f, 0, 0), new Vector3(0, 1f, 0),
        //        new Vector3(-1f, 0, 0), new Vector3(0, -1f, 0) };
        //
        //    int index = Random.Range(0, 4);
        //    addition = choices[index];
        //}

        if (attackDirection == Vector3.zero)
        {
            return;
        }

        List <Vector3> attackPositions = new List <Vector3>();
        Vector3        position        = transform.position;

        if (ray != null)
        {
            for (int i = 0; i < ray.Count; i++)
            {
                ray[i].SetActive(false);
                Destroy(ray[i]);
            }
            ray.Clear();
        }

        ray = new List <GameObject>();
        AddInitialRay(transform.position); // Initnial ray

        bool playerReached = false;

        for (int i = 0; i < range; i++)
        {
            position += attackDirection;

            Debug.Log("Position: " + position);

            if (!TilemapExtensions.IsCellEmpty(pathfindingTilemap, position))
            {
                if (!playerReached)
                {
                    Debug.Log("SPITTER: Clearing ray because player not reached.");
                    attackPositions.Clear();
                }

                Destroy(ray[ray.Count - 1]);
                ray.RemoveAt(ray.Count - 1);
                AddRay(position - attackDirection, true);
                break;
            }

            attackPositions.Add(position);

            if (Vector3.Distance(position, playerPosition) < 0.05f)
            {
                playerReached = true;
            }

            // Add the ray:
            if (i == range - 1)
            {
                AddRay(position, true);
            }
            else
            {
                AddRay(position, false);
            }
        }

        for (int i = 0; i < attackPositions.Count; i++)
        {
            Vector3Int tilePosition = groundTilemap.WorldToCell(attackPositions[i]);
            groundTilemap.SetTileFlags(tilePosition, TileFlags.None);
            groundTilemap.SetColor(tilePosition, attackColor);

            attackedTiles.Add(tilePosition);
            GameManager.Instance.AddAttackedTile(tilePosition);
        }
    }