Exemplo n.º 1
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="direction">as map direction not unity direction</param>
    public MoveResult Move(Vector2 direction)
    {
        //float move = m_remainingMove + moveSpeed;
        //m_remainingMove = move - (Mathf.Abs(move));

        //Debug.Log("Position on Map: " + MapPosition +", Position on World: "+transform.position);
        //Debug.Log("Move Input Direction: " + direction);

        float absX = Mathf.Abs(direction.x);
        float absY = Mathf.Abs(direction.y);
        float rand = UnityEngine.Random.value;
        int   x, y;

        if (absX > absY || (absX == absY && rand < 0.5f))
        {
            x = Math.Sign(direction.x);
            y = 0;
        }
        else
        {
            x = 0;
            y = Math.Sign(direction.y);
        }

        MoveResult result;
        Vector2    targetPosition = MoveGoal + new Vector2(x, y);

        x = (int)targetPosition.x;
        y = (int)targetPosition.y;
        World.Cell cell           = World.Instance.GetGrid().GetCell(x, y);
        //Debug.Log("Cell at " + targetPosition+":  " + cell.ToString());
        if (cell.IsBlocked)
        {
            //Debug.Log("Cell Blocked");
            result = new MoveResult(MoveResult.ResultValue.TileBlocked, cell, x, y);
        }
        else if (cell.ContainsEntity)
        {
            //Debug.Log("Cell Occupied");
            result = new MoveResult(MoveResult.ResultValue.TileOccupied, cell, x, y);
        }
        else
        {
            //Debug.Log("Move OK");
            result   = new MoveResult(MoveResult.ResultValue.Ok, cell, x, y);
            MoveGoal = targetPosition;
            m_syncActor.AssignAction(new SyncMoveAction(this, targetPosition));
        }
        return(result);
    }
Exemplo n.º 2
0
    private void doRoam()
    {
        float random = UnityEngine.Random.value;

        if (random < Constants.ROAM_MOVE_CHANCE)
        {
            Vector2 dir = UnityEngine.Random.insideUnitCircle.normalized;
            m_movingEntity.Move(dir);
            Synchronizer.Continue(m_actor, m_movingEntity.moveActionCost);
        }
        else
        {
            m_actor.AssignAction(new SynchronizedActor.IdleAction(m_actor, Constants.DEFAULT_IDLE_DURATION));
            Synchronizer.Continue(m_actor, Constants.DEFAULT_IDLE_DURATION);
        }
    }