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]); } }
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; }
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; }
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); }
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; } } }