Ejemplo n.º 1
0
    public override void DoUpdate(float deltaTime)
    {
        //update position
        var deg = CollisionHelper.GetDirDeg(dir);

        transform.rotation = Quaternion.Euler(0, 0, deg);
        //can move 判定
        var dirVec       = CollisionHelper.GetDirVec(dir);
        var moveDist     = (moveSpd * deltaTime);
        var fTargetHead  = pos + (TANK_HALF_LEN + moveDist) * (Vector2)dirVec;
        var fPreviewHead = pos + (TANK_HALF_LEN + FORWARD_HEAD_DIST) * (Vector2)dirVec;

        float maxMoveDist = moveSpd * deltaTime;
        var   headPos     = pos + (TANK_HALF_LEN)*(Vector2)dirVec;
        var   dist        = CollisionHelper.GetMaxMoveDist(dir, headPos, fTargetHead);
        var   dist2       = CollisionHelper.GetMaxMoveDist(dir, headPos, fPreviewHead);

        maxMoveDist = Mathf.Min(maxMoveDist, dist, dist2);

        var diffPos = maxMoveDist * (Vector2)dirVec;

        pos = pos + diffPos;
        if (camp == Global.PlayerCamp)
        {
            if (isChangedDir)
            {
                var idir = (int)(dir);
                var isUD = idir % 2 == 0;
                if (isUD)
                {
                    pos.x = CollisionHelper.RoundIfNear(pos.x - 0.5f, SNAP_DIST) + 0.5f;
                }
                else
                {
                    pos.y = CollisionHelper.RoundIfNear(pos.y - 0.5f, SNAP_DIST) + 0.5f;
                }
            }
        }


        transform.localPosition = pos;
        isChangedDir            = false;

        if (brain.enabled)
        {
            brain.DoUpdate(deltaTime);
        }

        if (skill != null)
        {
            skill.DoUpdate(deltaTime);
        }
    }
Ejemplo n.º 2
0
    public override void DoUpdate(float deltaTime)
    {
        base.DoUpdate(deltaTime);
        if (brain.enabled)
        {
            brain.DoUpdate(deltaTime);
        }

        if (skill != null)
        {
            skill.DoUpdate(deltaTime);
        }
    }