/// <summary> /// The update function is to catch input and to do the movement of the agent, this is temporary code. for testing purposes only. /// </summary> void Update() { if (!currentlyMoving) { if (pathList.Count > 0) { if (pathList[0] == currentMovePoint.neighborList[0]) //if (Input.GetKeyDown(KeyCode.UpArrow) && currentMovePoint.North) { pointToMoveTo = currentMovePoint.neighborList[0]; currentMovementDirection = DirectionOfMovement.North; currentlyMoving = true; currentMovementTime = timeToMoveToPoint; } else if (pathList[0] == currentMovePoint.neighborList[2]) //else if (Input.GetKeyDown(KeyCode.DownArrow) && currentMovePoint.South) { pointToMoveTo = currentMovePoint.neighborList[2]; currentMovementDirection = DirectionOfMovement.South; currentlyMoving = true; currentMovementTime = timeToMoveToPoint; } else if (pathList[0] == currentMovePoint.neighborList[3]) //else if (Input.GetKeyDown(KeyCode.LeftArrow) && currentMovePoint.West) { pointToMoveTo = currentMovePoint.neighborList[3]; currentMovementDirection = DirectionOfMovement.West; currentlyMoving = true; currentMovementTime = timeToMoveToPoint; } else if (pathList[0] == currentMovePoint.neighborList[1]) //else if (Input.GetKeyDown(KeyCode.RightArrow) && currentMovePoint.East) { pointToMoveTo = currentMovePoint.neighborList[1]; currentMovementDirection = DirectionOfMovement.East; currentlyMoving = true; currentMovementTime = timeToMoveToPoint; } } } else { switch (currentMovementDirection) { case DirectionOfMovement.North: if (currentMovementTime < 0.0f) { currentMovePoint = pointToMoveTo; currentMovementDirection = DirectionOfMovement.None; currentMovementTime = 0.0f; transform.position = currentMovePoint.transform.position; currentlyMoving = false; pointToMoveTo = null; pathList.RemoveAt(0); if (GridBehavior.preCombat && pathList.Count == 0) theGrid.startCombat(); } else { float forTForLerp = (timeToMoveToPoint - currentMovementTime) / timeToMoveToPoint; float forTheChangeInZ = Mathf.Lerp(currentMovePoint.transform.position.z, pointToMoveTo.transform.position.z, forTForLerp); transform.position = new Vector3(transform.position.x, transform.position.y, forTheChangeInZ); currentMovementTime -= Time.deltaTime; } break; case DirectionOfMovement.South: if (currentMovementTime < 0.0f) { currentMovePoint = pointToMoveTo; currentMovementDirection = DirectionOfMovement.None; currentMovementTime = 0.0f; transform.position = currentMovePoint.transform.position; currentlyMoving = false; pointToMoveTo = null; pathList.RemoveAt(0); if (GridBehavior.preCombat && pathList.Count == 0) theGrid.startCombat(); } else { float forTForLerp = (timeToMoveToPoint - currentMovementTime) / timeToMoveToPoint; float forTheChangeInZ = Mathf.Lerp(currentMovePoint.transform.position.z, pointToMoveTo.transform.position.z, forTForLerp); transform.position = new Vector3(transform.position.x, transform.position.y, forTheChangeInZ); currentMovementTime -= Time.deltaTime; } break; case DirectionOfMovement.East: if (currentMovementTime < 0.0f) { currentMovePoint = pointToMoveTo; currentMovementDirection = DirectionOfMovement.None; currentMovementTime = 0.0f; transform.position = currentMovePoint.transform.position; currentlyMoving = false; pointToMoveTo = null; pathList.RemoveAt(0); if (GridBehavior.preCombat && pathList.Count == 0) theGrid.startCombat(); } else { float forTForLerp = (timeToMoveToPoint - currentMovementTime) / timeToMoveToPoint; float forTheChangeInX = Mathf.Lerp(currentMovePoint.transform.position.x, pointToMoveTo.transform.position.x, forTForLerp); transform.position = new Vector3(forTheChangeInX, transform.position.y, transform.position.z); currentMovementTime -= Time.deltaTime; } break; case DirectionOfMovement.West: if (currentMovementTime < 0.0f) { currentMovePoint = pointToMoveTo; currentMovementDirection = DirectionOfMovement.None; currentMovementTime = 0.0f; transform.position = currentMovePoint.transform.position; currentlyMoving = false; pointToMoveTo = null; pathList.RemoveAt(0); if (GridBehavior.preCombat && pathList.Count == 0) theGrid.startCombat(); } else { float forTForLerp = (timeToMoveToPoint - currentMovementTime) / timeToMoveToPoint; float forTheChangeInX = Mathf.Lerp(currentMovePoint.transform.position.x, pointToMoveTo.transform.position.x, forTForLerp); transform.position = new Vector3(forTheChangeInX, transform.position.y, transform.position.z); currentMovementTime -= Time.deltaTime; } break; } } }
public Piece Move(DirectionOfMovement directionOfMovement) { var moveDictionary = new Dictionary<DirectionOfMovement, Func<Piece>>() { {DirectionOfMovement.Down, () => new Piece(Coordinates.Select(x => x.Move(0,1)))}, {DirectionOfMovement.Up, () => new Piece(Coordinates.Select(x => x.Move(0,-1)))}, {DirectionOfMovement.Left, () => new Piece(Coordinates.Select(x => x.Move(-1,0)))}, {DirectionOfMovement.Right, () => new Piece(Coordinates.Select(x => x.Move(1,0)))} }; return moveDictionary[directionOfMovement](); }