Пример #1
0
    public Speed getMovePointsLeft()
    {
        SpeedType currentSpeedType = SpeedType.LAND;
        Speed     currentSpeed     = speedometer.GetSpeed(currentSpeedType);

        return(currentSpeed);
    }
Пример #2
0
    protected bool Move(int xDir, int yDir, Speedometer speedometer, out RaycastHit2D hit, bool freeMoveMode)
    {
        Vector2 start    = transform.position;
        Vector2 end      = start + new Vector2(xDir, yDir);
        float   distance = Vector2.Distance(start, end);

        bool weHaveEnoughSpeed = true;
        //calculate move cost
        //check the target wallmap
        //TODO here we could change what kind of systems work, now I make just a statement to delete what is not implemented in scene.
        //RogueLikeTile roguetile = null;
        DataEntry data = null;

        if (GridScript.instance != null)
        {
            //roguetile = GridScript.instance.wallMap.getTileFromWorld(new Vector3(end.x, end.y, 0F));
            data = GridScript.instance.GetDataFromWorld(new Vector3(end.x, end.y, 0F));
        }
        int moveCost = TerrainChart.instance.GetCostToEnter(data, xDir, yDir, distance, SpeedType.LAND);

        //some default
        float effectiveMoveSpeed = 1;



        //if we have speedometer, we should take the terrain and reduce the speed as we now have no terrain
        //and we always move only 1 move we reduce the distance of one square and it means speed of 5
        if (speedometer != null && moveCost >= 0)
        {
            //in freeMoveMode we do not pay movement allowance in movepoints but in time, and for that we need effective speed compared to terrain
            effectiveMoveSpeed = speedometer.GetSpeed(SpeedType.LAND).GetCurrentMaxSpeed() / (moveTime * moveCost);
            Debug.Log("effectiveMoveSpeed = " + effectiveMoveSpeed);

            //we pay the cost in movementpoints if we are not in freeMoveMode
            if (!freeMoveMode)
            {
                weHaveEnoughSpeed = speedometer.PayMovementAllowance(moveCost, SpeedType.LAND);
            }
        }
        else
        {
            weHaveEnoughSpeed = false;
        }
        //Debug.Log("Heipparallaa");

        boxCollider.enabled = false;
        hit = Physics2D.Linecast(start, end, blockingLayer);
        boxCollider.enabled = true;

        if (hit.transform == null && weHaveEnoughSpeed)
        {
            StartCoroutine(SmoothMovement(end, effectiveMoveSpeed));
            return(true);
        }
        return(false);
    }