Пример #1
0
        /// <summary>
        /// Triggered when a TopDownController touches the platform
        /// </summary>
        /// <param name="controller">The TopDown controller that collides with the platform.</param>
        public virtual void OnTriggerStay2D(Collider2D collider)
        {
            TopDownController2D controller = collider.gameObject.MMGetComponentNoAlloc <TopDownController2D>();

            if (controller == null)
            {
                return;
            }

            if (State == FallingPlatformStates.Falling)
            {
                return;
            }

            if (TimeBeforeFall > 0)
            {
                _contact = true;
                State    = FallingPlatformStates.Shaking;
            }
            else
            {
                if (!InevitableFall)
                {
                    _contact = false;
                    State    = FallingPlatformStates.Idle;
                }
            }
        }
Пример #2
0
 protected virtual void DetachCharacterFromPlatform(Collider2D collider)
 {
     _topdDownController2D = collider.gameObject.MMGetComponentNoAlloc <TopDownController2D>();
     if (_topdDownController2D != null)
     {
         _topdDownController2D.SetMovingPlatform(null);
     }
 }
Пример #3
0
 /// <summary>
 /// Gets and stores components for further use
 /// </summary>
 protected virtual void Initialization()
 {
     BindAnimator();
     _controller         = GetComponent <TopDownController>();
     _controller2D       = GetComponent <TopDownController2D>();
     _controller3D       = GetComponent <TopDownController3D>();
     _model              = _character.CharacterModel;
     _characterMovement  = GetComponent <CharacterMovement>();
     _spriteRenderer     = GetComponent <SpriteRenderer>();
     _health             = GetComponent <Health> ();
     _inputManager       = _character.LinkedInputManager;
     _state              = _character.CharacterState;
     _movement           = _character.MovementState;
     _condition          = _character.ConditionState;
     _abilityInitialized = true;
 }
Пример #4
0
        protected virtual void AttachCharacterToMovingPlatform(Collider2D collider)
        {
            _topdDownController2D = collider.gameObject.MMGetComponentNoAlloc <TopDownController2D>();
            if (_topdDownController2D != null)
            {
                _topdDownController2D.SetMovingPlatform(this);
            }
            //

            if (UseSafeDistance)
            {
                float distance = Vector3.Distance(collider.transform.position, this.transform.position);
                if (distance > ForcedSafeDistance)
                {
                    _translationVector = (this.transform.position - collider.transform.position).normalized * Mathf.Min(distance, ForcedSafeDistance);
                    collider.transform.Translate(_translationVector);
                }
            }
        }
Пример #5
0
        /// <summary>
        /// Adds all the possible components to a character
        /// </summary>
        protected virtual void GenerateCharacter(Character.CharacterTypes type, Modes mode)
        {
            Character character = (Character)target;

            Debug.LogFormat(character.name + " : Character Autobuild Start");

            if (type == Character.CharacterTypes.Player)
            {
                character.CharacterType = Character.CharacterTypes.Player;
                // sets the layer
                character.gameObject.layer = LayerMask.NameToLayer("Player");
                // sets the tag
                character.gameObject.tag = "Player";
                // sets the player ID
                character.PlayerID = "Player1";
            }

            if (type == Character.CharacterTypes.AI)
            {
                character.CharacterType = Character.CharacterTypes.AI;
                // sets the layer
                character.gameObject.layer = LayerMask.NameToLayer("Enemies");
            }

            if (mode == Modes.TwoD)
            {
                // Adds the rigidbody2D
                Rigidbody2D rigidbody2D = (character.GetComponent <Rigidbody2D>() == null) ? character.gameObject.AddComponent <Rigidbody2D>() : character.GetComponent <Rigidbody2D>();
                rigidbody2D.bodyType               = RigidbodyType2D.Dynamic;
                rigidbody2D.simulated              = true;
                rigidbody2D.useAutoMass            = false;
                rigidbody2D.mass                   = 1;
                rigidbody2D.drag                   = 1;
                rigidbody2D.angularDrag            = 0.05f;
                rigidbody2D.gravityScale           = 0;
                rigidbody2D.interpolation          = RigidbodyInterpolation2D.Interpolate;
                rigidbody2D.sleepMode              = RigidbodySleepMode2D.StartAwake;
                rigidbody2D.collisionDetectionMode = CollisionDetectionMode2D.Continuous;
                rigidbody2D.constraints            = RigidbodyConstraints2D.FreezeRotation;

                SortingGroup sortingGroup = (character.GetComponent <SortingGroup>() == null) ? character.gameObject.AddComponent <SortingGroup>() : character.GetComponent <SortingGroup>();
                sortingGroup.sortingLayerName = "Characters";

                // Adds the boxcollider2D if needed
                BoxCollider2D boxcollider2D = (character.GetComponent <BoxCollider2D>() == null) ? character.gameObject.AddComponent <BoxCollider2D>() : character.GetComponent <BoxCollider2D>();
                boxcollider2D.isTrigger = false;

                // adds the top down controller 2D
                TopDownController2D topDownController2D = (character.GetComponent <TopDownController2D>() == null) ? character.gameObject.AddComponent <TopDownController2D>() : character.GetComponent <TopDownController2D>();
                topDownController2D.Gravity         = -30;
                topDownController2D.GroundLayerMask = LayerMask.GetMask("Ground");
                topDownController2D.HoleLayerMask   = LayerMask.GetMask("Hole");

                // adds 2D specific components
                if (character.GetComponent <CharacterOrientation2D>() == null)
                {
                    character.gameObject.AddComponent <CharacterOrientation2D>();
                }
                if (character.GetComponent <CharacterDash2D>() == null)
                {
                    character.gameObject.AddComponent <CharacterDash2D>();
                }
                if (character.GetComponent <CharacterJump2D>() == null)
                {
                    character.gameObject.AddComponent <CharacterJump2D>();
                }
            }

            if (mode == Modes.ThreeD)
            {
                // adds a capsule collider if needed
                CapsuleCollider capsuleCollider = (character.GetComponent <CapsuleCollider>() == null) ? character.gameObject.AddComponent <CapsuleCollider>() : character.GetComponent <CapsuleCollider>();
                capsuleCollider.isTrigger = true;

                // adds a character controller
                CharacterController characterController = (character.GetComponent <CharacterController>() == null) ? character.gameObject.AddComponent <CharacterController>() : character.GetComponent <CharacterController>();
                characterController.slopeLimit      = 45f;
                characterController.stepOffset      = 0.3f;
                characterController.skinWidth       = 0.08f;
                characterController.minMoveDistance = 0.001f;
                characterController.radius          = 0.5f;

                // adds a rigidbody
                Rigidbody rigidbody = (character.GetComponent <Rigidbody>() == null) ? character.gameObject.AddComponent <Rigidbody>() : character.GetComponent <Rigidbody>();
                rigidbody.mass                   = 1;
                rigidbody.drag                   = 0;
                rigidbody.angularDrag            = 0.05f;
                rigidbody.interpolation          = RigidbodyInterpolation.None;
                rigidbody.collisionDetectionMode = CollisionDetectionMode.Discrete;
                rigidbody.useGravity             = true;
                rigidbody.isKinematic            = true;

                // adds the top down controller 3D
                TopDownController3D topDownController3D = (character.GetComponent <TopDownController3D>() == null) ? character.gameObject.AddComponent <TopDownController3D>() : character.GetComponent <TopDownController3D>();
                topDownController3D.Gravity            = 40;
                topDownController3D.GroundLayerMask    = LayerMask.GetMask("Ground");
                topDownController3D.ObstaclesLayerMask = LayerMask.GetMask("Obstacles");

                // adds 3D specific components
                if (character.GetComponent <CharacterOrientation3D>() == null)
                {
                    character.gameObject.AddComponent <CharacterOrientation3D>();
                }
                if (character.GetComponent <CharacterCrouch>() == null)
                {
                    character.gameObject.AddComponent <CharacterCrouch>();
                }
                if (character.GetComponent <CharacterJump3D>() == null)
                {
                    character.gameObject.AddComponent <CharacterJump3D>();
                }
                if (character.GetComponent <CharacterDash3D>() == null)
                {
                    character.gameObject.AddComponent <CharacterDash3D>();
                }
            }

            // adds components common to 2D and 3D
            if (character.GetComponent <CharacterMovement>() == null)
            {
                character.gameObject.AddComponent <CharacterMovement>();
            }
            if (character.GetComponent <CharacterRun>() == null)
            {
                character.gameObject.AddComponent <CharacterRun>();
            }

            // adds (usually) player specific components
            if (type == Character.CharacterTypes.Player)
            {
                if (character.GetComponent <CharacterButtonActivation>() == null)
                {
                    character.gameObject.AddComponent <CharacterButtonActivation>();
                }
                if (character.GetComponent <CharacterPause>() == null)
                {
                    character.gameObject.AddComponent <CharacterPause>();
                }
                if (character.GetComponent <CharacterTimeControl>() == null)
                {
                    character.gameObject.AddComponent <CharacterTimeControl>();
                }
            }

            // adds health
            Health health = (character.GetComponent <Health>() == null) ? character.gameObject.AddComponent <Health>() : character.GetComponent <Health>();

            health.MaximumHealth = 100;
            health.CurrentHealth = 100;

            Debug.LogFormat(character.name + " : Character Autobuild Complete");
        }