Ejemplo n.º 1
0
    //Me muevo a la posicion dentro del rango de movimiento
    private void WalkToEnemyInRange(UnitGridCombat thisUnit)
    {
        Grid <GridCombatSystem.GridObject> grid = GameHandler_GridCombatSystem.Instance.GetGrid();
        GridPathfinding gridPathfinding         = GameHandler_GridCombatSystem.Instance.gridPathfinding;

        if (CheckCollisionsTargetIntermedio() && gridObject.GetUnitGridCombat() == null)
        {
            if (thisUnit.GetComponent <CHARACTER_PREFS>().tipo != CHARACTER_PREFS.Tipo.DUMMY)
            {
                grid.GetGridObject(thisUnit.GetPosition()).ClearUnitGridCombat();
                thisUnit.MoveTo(target, () =>
                {
                    gridObject.SetUnitGridCombat(thisUnit);
                    if (gridCombatSystem.GetComponent <GridCombatSystem>().SeekEnemiesIA(thisUnit) == true)
                    {
                        thisUnit.AttackUnit(lookForEnemies(thisUnit));
                    }
                });
            }
        }
        else
        {
            Debug.Log("Aqui no deberia entrar nunca");
        }
    }
Ejemplo n.º 2
0
        public MyNavigationPrimitive FindClosestPrimitive(Vector3D point, bool highLevel, MyEntity entity = null)
        {
            double closestDistSq = double.PositiveInfinity;
            MyNavigationPrimitive closestPrimitive = null;

            MyNavigationPrimitive closest = null;

            MyVoxelMap voxelMap = entity as MyVoxelMap;
            MyCubeGrid cubeGrid = entity as MyCubeGrid;

            if (voxelMap != null)
            {
                closestPrimitive = VoxelPathfinding.FindClosestPrimitive(point, highLevel, ref closestDistSq, voxelMap);
            }
            else if (cubeGrid != null)
            {
                closestPrimitive = GridPathfinding.FindClosestPrimitive(point, highLevel, ref closestDistSq, cubeGrid);
            }
            else
            {
                closest = VoxelPathfinding.FindClosestPrimitive(point, highLevel, ref closestDistSq);
                if (closest != null)
                {
                    closestPrimitive = closest;
                }
                closest = GridPathfinding.FindClosestPrimitive(point, highLevel, ref closestDistSq);
                if (closest != null)
                {
                    closestPrimitive = closest;
                }
            }

            return(closestPrimitive);
        }
    private void Awake()
    {
        Instance = this;

        var mapWidth  = 10;
        var mapHeight = 8;

        var origin = new Vector3(0, 0);

        _grid = new Grid <GridCombatSystem.GridObject>(
            mapWidth,
            mapHeight,
            cellSize,
            origin,
            (g, x, y) => new GridCombatSystem.GridObject(g, x, y)
            );

        gridPathfinding = new GridPathfinding(origin + new Vector3(1, 1) * cellSize * .5f,
                                              new Vector3(mapWidth, mapHeight) * cellSize, cellSize);
        gridPathfinding.RaycastWalkable();

        var gridTile = Resources.Load("Sprites/grid", typeof(GameObject)) as GameObject;

        gridTile.transform.localScale = new Vector3(14, 14, 10);
        gridPathfinding.PrintMap((vec, size, color) =>
                                 Instantiate(gridTile, vec, Quaternion.identity));

        _gridRespawnLeftContainer  = GameObject.Find("GridRespawnLeftContainer").transform;
        _gridRespawnRightContainer = GameObject.Find("GridRespawnRightContainer").transform;
    }
Ejemplo n.º 4
0
 public PathNode(GridPathfinding <PathNode> grid, int x, int y, bool isWalkable,
                 List <ReferenceToObject> referenceToObjects)
 {
     this.grid               = grid;
     this.x                  = x;
     this.y                  = y;
     this.isWalkable         = isWalkable;
     this.referenceToObjects = referenceToObjects;
 }
    private void Start()
    {
        //Sound_Manager.Init();

        gridPathfinding = new GridPathfinding(new Vector3(-400, -400), new Vector3(400, 400), 5f);
        gridPathfinding.RaycastWalkable();

        OvermapHandler.GetInstance().Start(transform);

        cameraFollow.Setup(GetCameraPosition, () => 70f, true, true);
    }
Ejemplo n.º 6
0
    private void Start()
    {
        //Sound_Manager.Init();
        cameraFollow.Setup(GetCameraPosition, () => 70f, true, true);

        gridPathfinding = new GridPathfinding(new Vector3(-400, -400), new Vector3(400, 400), 5f);
        gridPathfinding.RaycastWalkable();

        //OvermapHandler.SpawnFollower();
        //OvermapHandler.SpawnEnemy(new Vector3(150, 0));
    }
Ejemplo n.º 7
0
    public Pathfinding(int width, int height, float cellSize, List <GridSquare>[,] gridSquares)
    {
        PathNode CreatePathNode(GridPathfinding <PathNode> g, int x, int y, List <GridSquare>[,] grids)
        {
            var isWalkable         = grids[x, y].IsEmpty() || !grids[x, y].Exists(square => !square.isWalkable);
            var referenceToObjects = grids[x, y].Select(square => square.referenceToObject).ToList();

            return(new PathNode(g, x, y, isWalkable, referenceToObjects));
        }

        grid = new GridPathfinding <PathNode>(width, height, cellSize, Vector3.zero, gridSquares, CreatePathNode);
    }
Ejemplo n.º 8
0
    private void Start()
    {
        //Sound_Manager.Init();
        cameraFollow.Setup(GetCameraPosition, () => 80f);// 80f);

        //FunctionPeriodic.Create(SpawnEnemy, 1.5f);

        gridPathfinding = new GridPathfinding(new Vector3(-400, -400), new Vector3(400, 400), 5f);
        gridPathfinding.RaycastWalkable();

        //EnemyHandler.Create(new Vector3(0, 0));

        characterAimHandler.OnShoot += CharacterAimHandler_OnShoot;
    }
    private void Awake()
    {
        Instance = this;

        int     mapWidth  = 60;
        int     mapHeight = 60;
        float   cellSize  = 10f;
        Vector3 origin    = new Vector3(0, 0);

        grid = new Grid <GridCombatSystem.GridObject>(mapWidth, mapHeight, cellSize, origin, (Grid <GridCombatSystem.GridObject> g, int x, int y) => new GridCombatSystem.GridObject(g, x, y));

        gridPathfinding = new GridPathfinding(origin + new Vector3(1, 1) * cellSize * .5f, new Vector3(mapWidth, mapHeight) * cellSize, cellSize);
        gridPathfinding.RaycastWalkable();
        movementTilemap = new MovementTilemap(mapWidth, mapHeight, cellSize, origin);
    }
    private void Awake()
    {
        Instance = this;

        int     mapWidth  = 40;
        int     mapHeight = 25;
        float   cellSize  = 10f;
        Vector3 origin    = new Vector3(0, 0);

        grid = new Grid <GridCombatSystem.GridObject>(mapWidth, mapHeight, cellSize, origin, (Grid <GridCombatSystem.GridObject> g, int x, int y) => new GridCombatSystem.GridObject(g, x, y));

        gridPathfinding = new GridPathfinding(origin + new Vector3(1, 1) * cellSize * .5f, new Vector3(mapWidth, mapHeight) * cellSize, cellSize);
        gridPathfinding.RaycastWalkable();
        //gridPathfinding.PrintMap((Vector3 vec, Vector3 size, Color color) => World_Sprite.Create(vec, size, color));

        movementTilemap = new MovementTilemap(mapWidth, mapHeight, cellSize, origin);
    }
Ejemplo n.º 11
0
    private void Start()
    {
        //Sound_Manager.Init();
        cameraFollow.Setup(GetCameraPosition, () => 60f, true, true);

        //FunctionPeriodic.Create(SpawnEnemy, 1.5f);
        //for (int i = 0; i < 1000; i++) SpawnEnemy();

        gridPathfinding = new GridPathfinding(new Vector3(-400, -400), new Vector3(400, 400), 5f);
        gridPathfinding.RaycastWalkable();

        EnemyHandler.Create(new Vector3(20, 0));

        if (characterAimHandler != null)
        {
            characterAimHandler.OnShoot += CharacterAimHandler_OnShoot;
        }
    }
Ejemplo n.º 12
0
    private void Start()
    {
        // TODO nice to have - scriptable objects for sizes
        _nodeSize = 17;
        var mapWidth  = 10;
        var mapHeight = 8;

        _worldOrigin = new Vector3(0, 0);

        gridPathfinding = new GridPathfinding(
            _worldOrigin + new Vector3(1, 1) * _nodeSize * .5f,
            new Vector3(mapWidth, mapHeight) * _nodeSize, _nodeSize
            );
        gridPathfinding.RaycastWalkable();
        gridPathfinding.PrintMap((vec, size, color) =>
                                 Instantiate(walkablePrefab, vec, Quaternion.identity));
        foreach (var objectOnMap in objectsOnMap)
        {
            if (objectOnMap == null)
            {
                return;
            }

            var origin     = new Vector3(0, 0);
            var cellSize   = 17;
            var cellCenter = cellSize / 2;
            // Objects has to be in objectOnMap list in order to snap to grid
            var objectOnMapTransformPosition = objectOnMap.transform.position;
            // _objectOnGridPosition.x = Mathf.Floor(objectOnMapTransformPosition.x / _nodeSize) * _nodeSize;
            // _objectOnGridPosition.y = Mathf.Floor(objectOnMapTransformPosition.y / _nodeSize) * _nodeSize;
            // _objectOnGridPosition.z = 0;
            objectOnMap.transform.position = new Vector3(cellCenter + gameObject.transform.position.x * cellSize,
                                                         cellCenter + gameObject.transform.position.y * cellSize) + new Vector3(1, 1) * 0.5f;
        }

        if (testObjectForGridSnapTests == null)
        {
            Debug.Log("No test object is provided");
            _debugMode = false;
        }

        ;
    }
Ejemplo n.º 13
0
        private void Start()
        {
            Sound_Manager.Init();
            cameraFollow.Setup(GetCameraPosition, () => 60f, true, true);

            Vector3 pathfindingLowerLeft  = transform.Find("PathfindingLowerLeft").position;
            Vector3 pathfindingUpperRight = transform.Find("PathfindingUpperRight").position;

            gridPathfinding = new GridPathfinding(pathfindingLowerLeft, pathfindingUpperRight, 5f);
            //gridPathfinding.RaycastWalkable(1 << GameAssets.i.wallLayer);
            //gridPathfinding.PrintMap(pfPathfindingWalkable, pfPathfindingUnWalkable);

            //Enemy enemy = Enemy.Create(player.GetPosition() + new Vector3(+60, 0));
            //enemy.EnemyMain.EnemyTargeting.SetGetTarget(() => player);

            uiWeapon.SetWeapon(player.GetWeapon());
            player.OnWeaponChanged += Player_OnWeaponChanged;

            //FunctionTimer.Create(() => doorAnims.OpenDoor(), 3f);
        }
Ejemplo n.º 14
0
    public GridPathfinding(Vector3 worldLowerLeft, Vector3 worldUpperRight, float nodeSize)
    {
        instance      = this;
        worldOrigin   = worldLowerLeft;
        this.nodeSize = nodeSize;

        var worldWidth  = worldUpperRight.x - worldLowerLeft.x;
        var worldHeight = worldUpperRight.y - worldLowerLeft.y;

        var mapWidth  = Mathf.RoundToInt(worldWidth / nodeSize);
        var mapHeight = Mathf.RoundToInt(worldHeight / nodeSize);

        mapNodes = new PathNode[mapWidth][];
        for (var i = 0; i < mapWidth; i++)
        {
            mapNodes[i] = new PathNode[mapHeight];
        }

        widthMax  = mapWidth;
        heightMax = mapHeight;
        Debug.Log($"Map width:{mapWidth}, map height {mapHeight}");
        Initialize(mapWidth, mapHeight);
    }
Ejemplo n.º 15
0
    private void UpdateValidMovePositions()
    {
        Grid <GridObject> grid            = GameHandler_GridCombatSystem.Instance.GetGrid();
        GridPathfinding   gridPathfinding = GameHandler_GridCombatSystem.Instance.gridPathfinding;

        // Get Unit Grid Position X, Y
        grid.GetXY(unitGridCombat.GetPosition(), out int unitX, out int unitY);

        // Set entire Tilemap to Invisible
        GameHandler_GridCombatSystem.Instance.GetMovementTilemap().SetAllTilemapSprite(
            MovementTilemap.TilemapObject.TilemapSprite.None
            );

        // Reset Entire Grid ValidMovePositions
        for (int x = 0; x < grid.GetWidth(); x++)
        {
            for (int y = 0; y < grid.GetHeight(); y++)
            {
                grid.GetGridObject(x, y).SetIsValidMovePosition(false);
            }
        }

        int maxMoveDistance = 5;

        for (int x = unitX - maxMoveDistance; x <= unitX + maxMoveDistance; x++)
        {
            for (int y = unitY - maxMoveDistance; y <= unitY + maxMoveDistance; y++)
            {
                if (gridPathfinding.IsWalkable(x, y))
                {
                    // Position is Walkable
                    if (gridPathfinding.HasPath(unitX, unitY, x, y))
                    {
                        // There is a Path
                        if (gridPathfinding.GetPath(unitX, unitY, x, y).Count <= maxMoveDistance)
                        {
                            // Path within Move Distance

                            // Set Tilemap Tile to Move
                            GameHandler_GridCombatSystem.Instance.GetMovementTilemap().SetTilemapSprite(
                                x, y, MovementTilemap.TilemapObject.TilemapSprite.Move
                                );

                            grid.GetGridObject(x, y).SetIsValidMovePosition(true);
                        }
                        else
                        {
                            // Path outside Move Distance!
                        }
                    }
                    else
                    {
                        // No valid Path
                    }
                }
                else
                {
                    // Position is not Walkable
                }
            }
        }
    }
Ejemplo n.º 16
0
 private void Awake()
 {
     instance = this;
     CountTiles();
 }
Ejemplo n.º 17
0
    //Moverse hacia un enemigo al target intermedio (Movimiento fuera del Rango de Movimiento)
    private void WalkToEnemyOutOfRange(UnitGridCombat thisUnit)
    {
        Grid <GridCombatSystem.GridObject> grid = GameHandler_GridCombatSystem.Instance.GetGrid();
        GridPathfinding gridPathfinding         = GameHandler_GridCombatSystem.Instance.gridPathfinding;

        SelectNewMovePosition(thisUnit.GetPosition()); //Se calcula el targetIntermedio
        gridObject = grid.GetGridObject(targetIntermedio);
        if (CheckCollisionsTargetIntermedio() && gridObject.GetUnitGridCombat() == null)
        {
            if (thisUnit.GetComponent <CHARACTER_PREFS>().tipo != CHARACTER_PREFS.Tipo.DUMMY)
            {
                grid.GetGridObject(thisUnit.GetPosition()).ClearUnitGridCombat();
                thisUnit.MoveTo(targetIntermedio, () =>
                {
                    gridObject.SetUnitGridCombat(thisUnit);
                    if (gridCombatSystem.GetComponent <GridCombatSystem>().SeekEnemiesIA(thisUnit) == true)
                    {
                        thisUnit.AttackUnit(lookForEnemies(thisUnit));
                    }
                });
            }
        }
        //Buscar nuevo target Intermedio y me muevo
        else
        {
            enemyOutOfRange  = false; //El target intermedio se calcula para que siempre este a rango de movimiento, por lo tanto esto va a ser siempre false en esta parte del codigo
            targetIntermedio = CheckTargetRange(targetIntermedio, thisUnit);
            gridObject       = grid.GetGridObject(targetIntermedio);
            if (CheckCollisionsTargetIntermedio() && gridObject.GetUnitGridCombat() == null && CheckMoveRange(targetIntermedio, thisUnit.GetPosition()))
            {
                if (thisUnit.GetComponent <CHARACTER_PREFS>().tipo != CHARACTER_PREFS.Tipo.DUMMY)
                {
                    grid.GetGridObject(thisUnit.GetPosition()).ClearUnitGridCombat();
                    thisUnit.MoveTo(targetIntermedio, () =>
                    {
                        gridObject.SetUnitGridCombat(thisUnit);
                        if (gridCombatSystem.GetComponent <GridCombatSystem>().SeekEnemiesIA(thisUnit) == true)
                        {
                            thisUnit.AttackUnit(lookForEnemies(thisUnit));
                        }
                    });
                }
            }
            else //Busca un segundo target intermedio y sus adyacentes para moverse a una posicion
            {
                targetIntermedio = CheckTargetRange(targetIntermedio, thisUnit);
                gridObject       = grid.GetGridObject(targetIntermedio);
                if (CheckCollisionsTargetIntermedio() && gridObject.GetUnitGridCombat() == null && CheckMoveRange(targetIntermedio, thisUnit.GetPosition()))
                {
                    if (thisUnit.GetComponent <CHARACTER_PREFS>().tipo != CHARACTER_PREFS.Tipo.DUMMY)
                    {
                        grid.GetGridObject(thisUnit.GetPosition()).ClearUnitGridCombat();
                        thisUnit.MoveTo(targetIntermedio, () =>
                        {
                            gridObject.SetUnitGridCombat(thisUnit);
                            if (gridCombatSystem.GetComponent <GridCombatSystem>().SeekEnemiesIA(thisUnit) == true)
                            {
                                thisUnit.AttackUnit(lookForEnemies(thisUnit));
                            }
                        });
                    }
                }
            }
        }
    }