//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"); } }
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; }
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); }
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)); }
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); }
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); }
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; } }
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; } ; }
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); }
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); }
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 } } } }
private void Awake() { instance = this; CountTiles(); }
//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)); } }); } } } } }