/// <summary> /// Sets step size for the fuel controller basing on pickup feed rate and engine fuel capacity /// </summary> /// <param name="type">Pickup</param> public override void SetStepSize(PickupObj matchPickup) { if (MaxDieselLevelL != 0) { FuelController.SetStepSize(matchPickup.PickupCapacity.FeedRateKGpS / MSTSNotchController.StandardBoost / (MaxDieselLevelL * DieselWeightKgpL)); } }
/// <summary> /// Sets step size for the fuel controller basing on pickup feed rate and engine fuel capacity /// </summary> /// <param name="type">Pickup</param> public override void SetStepSize(PickupObj matchPickup) { if (MaximumSteamHeatBoilerWaterTankCapacityL != 0) { WaterController.SetStepSize(matchPickup.PickupCapacity.FeedRateKGpS / MSTSNotchController.StandardBoost / MaximumSteamHeatBoilerWaterTankCapacityL); } }
void LiftObj(PickupObj pickupObj) { pickupRigidBody = pickupObj.gameObject.GetComponent <Rigidbody>(); if (pickupObj.CurrentState == PickupObj.State.Neutral) { pickupObj.SetPickedUp(); currentPickupObj = pickupObj; isLiftingObj = true; pickupRigidBody.useGravity = false; pickupRigidBody.velocity = Vector3.zero; pickupRigidBody.angularDrag = rotationSlowSpeed; pickupRigidBody.drag = 1f; } else if (pickupObj.CurrentState == PickupObj.State.PickedUp) { pickupObj.SetNeutral(); isLiftingObj = false; pickupRigidBody.useGravity = true; currentPickupObj = null; } else if (pickupObj.CurrentState == PickupObj.State.Frozen) { // do stuff here for frozen object } }
private void OnPickUpObjActivated(PickupObj pickUpObj) { if (PickUpObjActivated != null) { PickUpObjActivated.Invoke(pickUpObj); } }
void Start() { if (GetComponent <Animator>()) { animator = GetComponent <Animator>(); } if (GetComponent <PickupObj>()) { type = InteractObjType.Pickup; pickupObj = GetComponent <PickupObj>(); } if (GetComponent <Outline>()) { GetComponent <Outline>().SetOutline(false); } }
void HorizontalCollisions(ref Vector3 velocity) { float directionX = Mathf.Sign(velocity.x); float rayLength = Mathf.Abs(velocity.x) + skinWidth; for (int i = 0; i < horizontalRayCount; i++) { Vector2 rayOrigin = (directionX == -1) ? raycastOrigins.bottomLeft : raycastOrigins.bottomRight; rayOrigin += Vector2.up * (horizontalRaySpacing * i); RaycastHit2D[] hits = Physics2D.RaycastAll(rayOrigin, Vector2.right * directionX, rayLength, collisionMask); for (int j = 0; j < hits.Length; j++) { RaycastHit2D hit = hits[j]; if (hit) { if (hit.transform.tag == StringManager.Tags.pickupObj) { if (hit.transform != this.transform) { PickupObj pickupObj = hit.transform.GetComponent <PickupObj>(); float otherDirX = 0.0f; float otherVelocityX = pickupObj.GetMoveDir().x; if (otherVelocityX < 0.0f) { otherDirX = -1.0f; } else if (otherVelocityX > 0.0f) { otherDirX = 1.0f; } if (otherDirX == 0.0f || directionX == otherDirX) { pickupObj.SetMoveDir(new Vector2(velocity.x, 0.0f)); } } } if (hit.transform == this.transform) { continue; } if (hit.distance == 0) { continue; } if (hit.transform.tag == StringManager.Tags.platformJumpThrough) { continue; } float slopeAngle = Vector2.Angle(hit.normal, Vector2.up); // adjust speed if (slopeAngle > 0.0f && slopeAngle <= maxClimbAngle) { velocity = velocity / (1.0f + slopeAngle * Mathf.Deg2Rad * m_climbSpeedModifier); } if (i == 0 && slopeAngle <= maxClimbAngle) { if (collisions.descendingSlope) { collisions.descendingSlope = false; velocity = collisions.velocityOld; } float distanceToSlopeStart = 0; if (slopeAngle != collisions.slopeAngleOld) { distanceToSlopeStart = hit.distance - skinWidth; velocity.x -= distanceToSlopeStart * directionX; } ClimbSlope(ref velocity, slopeAngle); velocity.x += distanceToSlopeStart * directionX; } if (!collisions.climbingSlope || slopeAngle > maxClimbAngle) { velocity.x = (hit.distance - skinWidth) * directionX; rayLength = hit.distance; if (collisions.climbingSlope) { velocity.y = Mathf.Tan(collisions.slopeAngle * Mathf.Deg2Rad) * Mathf.Abs(velocity.x); } if (hit.transform.tag != StringManager.Tags.jumpPlatform) { collisions.left = directionX == -1; collisions.right = directionX == 1; } } } } } }