示例#1
0
        /// <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);
     }
 }
示例#5
0
 void Start()
 {
     if (GetComponent <Animator>())
     {
         animator = GetComponent <Animator>();
     }
     if (GetComponent <PickupObj>())
     {
         type      = InteractObjType.Pickup;
         pickupObj = GetComponent <PickupObj>();
     }
     if (GetComponent <Outline>())
     {
         GetComponent <Outline>().SetOutline(false);
     }
 }
示例#6
0
    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;
                        }
                    }
                }
            }
        }
    }