Example #1
0
    void onTargetArrived()
    {
        // 路径走完
        if (path.Count == 0)
        {
            PathFinished tmpDelegate = pathFinished;
            StopPath();

            if (tmpDelegate != null)
            {
                tmpDelegate();
            }
        }
        // 最后一个节点
        else if (path.Count == 1)
        {
            move.TargetPosition = dst;
            path.RemoveAt(0);
            move.Sync();
        }
        // 中间节点
        else
        {
            move.TargetPosition = MapNav.GetWorldPosition(path[0]);
            path.RemoveAt(0);
            move.Sync();
        }
    }
Example #2
0
    public void WalkTo(Vector3 _dst, PathFinished _delegate = null)
    {
        MapGrid gridOriginSrc = entity.Grid;
        MapGrid gridOriginDst = new MapGrid(_dst);

        // 如果起始点是阻挡,检测方向是否为走出阻挡的方向
        MapGrid gridRealSrc = gridOriginSrc;

        if ((MapNav[gridRealSrc.x, gridRealSrc.z] & entity.TileType) == 0)
        {
            if (MapNav.GetNearestValidGrid(gridOriginDst, gridOriginSrc, out gridRealSrc, entity.TileType, 1) == false)
            {
                StopPath();
                return;
            }
        }

        MapGrid gridRealDst;

        if (MapNav.GetNearestValidGrid(gridRealSrc, gridOriginDst, out gridRealDst, entity.TileType) == false)
        {
            StopPath();
            return;
        }

        // 正在走着
        if (path.Count > 0 && path[path.Count - 1] == gridRealDst)
        {
            pathFinished  = null;
            pathFinished += _delegate;
            return;
        }

        path = MapNav.GetPath(gridRealSrc, gridRealDst, entity.TileType);
        if (path.Count == 0)
        {
            StopPath();
            return;
        }

        //src = entity.Position;
        if (gridRealDst == gridOriginDst)
        {
            dst = _dst;
        }
        else
        {
            dst = MapNav.GetWorldPosition(gridRealDst);
        }
        move.targetArrived -= this.onTargetArrived;
        move.targetArrived += this.onTargetArrived;
        pathFinished        = null;
        pathFinished       += _delegate;

        // 路径第一个节点为起始点,放弃,从第二个节点开始
        path.RemoveAt(0);
        onTargetArrived();
    }
Example #3
0
 public void StopPath()
 {
     if (path.Count > 0)
     {
         path.Clear();
         move.targetArrived -= this.onTargetArrived;
         pathFinished        = null;
     }
 }
Example #4
0
	public void WalkTo(Vector3 _dst, PathFinished _delegate = null)
	{
		MapGrid gridOriginSrc = entity.Grid;
		MapGrid gridOriginDst = new MapGrid(_dst);

		// 如果起始点是阻挡,检测方向是否为走出阻挡的方向
		MapGrid gridRealSrc = gridOriginSrc;
		if ((MapNav[gridRealSrc.x, gridRealSrc.z] & entity.TileType) == 0)
		{
			if (MapNav.GetNearestValidGrid(gridOriginDst, gridOriginSrc, out gridRealSrc, entity.TileType, 1) == false)
			{
				StopPath();
				return;
			}
		}

		MapGrid gridRealDst;
		if (MapNav.GetNearestValidGrid(gridRealSrc, gridOriginDst, out gridRealDst, entity.TileType) == false)
		{
			StopPath();
			return;
		}

		// 正在走着
		if (path.Count > 0 && path[path.Count - 1] == gridRealDst)
		{
			pathFinished = null;
			pathFinished += _delegate;
			return;
		}

		path = MapNav.GetPath(gridRealSrc, gridRealDst, entity.TileType);
		if (path.Count == 0)
		{
			StopPath();
			return;
		}

		//src = entity.Position;
		if (gridRealDst == gridOriginDst)
			dst = _dst;
		else
			dst = MapNav.GetWorldPosition(gridRealDst);
		move.targetArrived -= this.onTargetArrived;
		move.targetArrived += this.onTargetArrived;
		pathFinished = null;
		pathFinished += _delegate;

		// 路径第一个节点为起始点,放弃,从第二个节点开始
		path.RemoveAt(0);
		onTargetArrived();
	}
Example #5
0
	public void StopPath()
	{
		if (path.Count > 0)
		{
			path.Clear();
			move.targetArrived -= this.onTargetArrived;
			pathFinished = null;
		}
	}