public static HexXY GetBlockCoords(Vector2 coord) { return(GetBlockCoords(HexXY.FromPlaneCoordinates(coord))); }
void Walking(float dt) { HexXY prevPos = pos; float distToTargetSqr = (interFracDest - fracPos).sqrMagnitude; Vector2 dir = (interFracDest - fracPos).normalized; //Calculate blocking //Debug.Log(distToTargetSqr + " " + (blockForwardDist * blockForwardDist)); if (distToTargetSqr >= blockForwardDist * blockForwardDist) { Vector2 nextBlockPos = fracPos + dir * blockForwardDist; HexXY nextPosCell = HexXY.FromPlaneCoordinates(nextBlockPos); if (!blockedCells.Contains(nextPosCell)) { if (Level.S.GetPFBlockedMap(nextPosCell) != WorldBlock.PFBlockType.Unblocked) { //Blocked by something - stop and move to nearest cell center dest = interDest = pos; //Debug.Log("Blocked dest " + pos); interFracDest = pos.ToPlaneCoordinates(); float timeToGetThere = (fracPos - interFracDest).magnitude / (speed * 0.5f); //at half speed Interfacing.PerformInterfaceMovePrecise(graphicsHandle, interFracDest, timeToGetThere); return; } else { Level.S.SetPFBlockedMap(nextPosCell, WorldBlock.PFBlockType.DynamicBlocked); //G.S.DebugShowCell(nextPosCell); blockedCells.Add(nextPosCell); } } } //Calculate movement Vector2 step = dir * speed * dt; if (step.sqrMagnitude == 0 || step.sqrMagnitude > distToTargetSqr) { fracPos = interFracDest; if (HexXY.Dist(interDest, dest.Value) <= distToStop) { dest = null; isWalking = false; Interfacing.PerformInterfaceStop(graphicsHandle, pos); } else { MovePart(); } } else { fracPos += step; } pos = HexXY.FromPlaneCoordinates(fracPos); if (pos != prevPos) { Level.S.RemoveEntity(prevPos, this); Level.S.AddEntity(pos, this); //Remove blocked cells that are behind us blockedCellsToDelete.Clear(); foreach (var bc in blockedCells) { Vector2 bcFrac = bc.ToPlaneCoordinates(); if (bc != pos && Vector2.Dot(fracPos - bcFrac, dir) > blockBackDist) { blockedCellsToDelete.Add(bc); } } foreach (var dbc in blockedCellsToDelete) { blockedCells.Remove(dbc); Level.S.SetPFBlockedMap(dbc, WorldBlock.PFBlockType.Unblocked); //G.S.DebugHideCell(dbc); } } this.dir = HexXY.GetApproximateDir(dir); }