示例#1
0
    void FootUpdate(int footIndex)
    {
        if (!CheckStepping() && CheckNeedStep(footIndex))
        {
            LegPosition legPosition = FindGround(legCenterArray[footIndex]);
            if (legPosition.isGrounded)
            {
                newPositionArray[footIndex] = legPosition.worldPosition;
                isSteppingArray[footIndex]  = true;
            }
        }
        else if (isSteppingArray[footIndex])
        {
            stepProgressArray[footIndex]   += Time.deltaTime / stepPeriod;
            targetArray[footIndex].position = SampleParabola(targetArray[footIndex].position, newPositionArray[footIndex], stepHeight, stepProgressArray[footIndex], Vector3.up);

            AngleToes(targetArray[footIndex], boneArray[footIndex]);
            if (stepProgressArray[footIndex] >= 1.0f)
            {
                isSteppingArray[footIndex]   = false;
                stepProgressArray[footIndex] = 0.0f;
            }
        }
        // check flying foot
        // else if (!FootGrounded(targetArray[footIndex].position))
        else if (!FootGrounded(boneArray[footIndex].position) && !CheckStepping())
        {
            // things go here
            // Debug.Log("air foot " + footIndex + " positioning");
            targetArray[footIndex].position = AirPosition(legCenterArray[footIndex]);
        }
    }
示例#2
0
 public HomePosition(LegPosition leftFrontLeg, LegPosition rightFrontLeg, LegPosition leftMiddleLeg, LegPosition rightMiddleLeg, LegPosition leftRearLeg, LegPosition rightRearLeg)
 {
     _leftFrontLeg = leftFrontLeg;
     _rightRearLeg = rightRearLeg;
     _leftRearLeg = leftRearLeg;
     _rightMiddleLeg = rightMiddleLeg;
     _leftMiddleLeg = leftMiddleLeg;
     _rightFrontLeg = rightFrontLeg;
 }
示例#3
0
        protected internal static Leg createLeg(Side side, Position position, double legOffset, short coxaId, short femurId, short tibiaId, double distanceToX, double distanceToZ, LegPosition legPosition)
        {
            Leg leg = new Leg(distanceToX, distanceToZ)
                          {
                              Side = side,
                              Position = position,
                              Offset = legOffset,
                              X = legPosition.X,
                              Y = legPosition.Y,
                              Z = legPosition.Z,
                              Coxa = new Coxa(3.8, legOffset, coxaId, 0, 0, side),
                              Femur = new Femur(7.6, -90, femurId, 0, 0, side),
                              Tibia = new Tibia(10.4, 120, tibiaId, 0, 0, side)
                          };

            return leg;
        }
示例#4
0
    LegPosition FindGround(Vector3 legCenterOffset)
    {
        RaycastHit  hit            = new RaycastHit();
        LegPosition outputPosition = new LegPosition();
        Vector3     localOffset    = transform.TransformVector(legCenterOffset);

        if (Physics.Raycast(transform.position + localOffset, -Vector3.up, out hit, legLength, layerMask))
        {
            // found ground
            Vector3 groundPosition = transform.position + localOffset - transform.up * (hit.distance - groundOffset);
            stepPeriod = (1.2f - Mathf.Clamp(motionController.rigidbody.velocity.magnitude / motionController.playerMaxSpeed, 0.2f, 1f)) * stepPeriodMax;
            Debug.DrawLine(transform.position + localOffset, groundPosition, Color.red);
            outputPosition.worldPosition = groundPosition;
            outputPosition.isGrounded    = true;

            Debug.DrawLine(transform.position + localOffset, groundPosition, Color.green, 0.5f);

            return(outputPosition);
        }
        outputPosition.worldPosition = Vector3.zero;
        outputPosition.isGrounded    = false;
        return(outputPosition);
    }
示例#5
0
        private void DrawSprite(GraphicsBuffer buffer, int topRow, int leftColumn, BattleItem item, LegPosition legPosition, int frame)
        {
            var isWalking = legPosition == LegPosition.Walking;
            var isKneeling = legPosition == LegPosition.Kneeling;
            var isOneHanded = item != null && !item.IsTwoHanded;
            var isTwoHanded = item != null && item.IsTwoHanded;

            var walkingOffset =
                isWalking ? walkingOffsets[frame] :
                isKneeling ? 2 : //TODO: correct offset for kneeling
                0;
            var armOffset =
                isWalking ? armOffsets[frame] :
                isKneeling ? 2 : //TODO: correct offset
                0;
            var leftArm =
                isTwoHanded ? twoHandedLeftArm :
                isWalking ? leftArmAnimation[frame] :
                emptyLeftArm;
            //TODO: Firing position
            var rightArm =
                isTwoHanded ? twoHandedRightArm :
                isOneHanded ? oneHandedRightArm :
                isWalking ? rightArmAnimation[frame] :
                emptyRightArm;
            var legs =
                isWalking ? legsAnimation[frame] :
                isKneeling ? legsKneeling :
                legsStanding;

            foreach (var part in direction.Metadata().DrawOrder)
            {
                switch (part)
                {
                case SpritePart.OneHandedWeapon:
                    if (isOneHanded)
                        buffer.DrawItem(topRow + armOffset + weaponOffset, leftColumn, item.Sprites[direction]);
                    break;
                case SpritePart.TwoHandedWeapon:
                    if (isTwoHanded)
                        buffer.DrawItem(topRow + armOffset + weaponOffset, leftColumn, item.Sprites[direction]);
                    break;
                case SpritePart.LeftArm:
                    buffer.DrawItem(topRow + armOffset, leftColumn, leftArm);
                    break;
                case SpritePart.RightArm:
                    buffer.DrawItem(topRow + armOffset, leftColumn, rightArm);
                    break;
                case SpritePart.Head:
                    buffer.DrawItem(topRow + walkingOffset, leftColumn, head);
                    break;
                case SpritePart.Legs:
                    buffer.DrawItem(topRow, leftColumn, legs);
                    break;
                }
            }
        }