Esempio n. 1
0
        public override void OnUpdate()
        {
            CharacterManager     c = GetCharacterController();
            EntityPhysicsManager physicsManager = GetPhysicsManager();
            CharacterStats       stats          = (CharacterStats)c.entityDefinition.GetEntityStats();
            Vector2 movementAxis = c.InputManager.GetAxis2D((int)EntityInputs.MOVEMENT);
            float   maxSpeed     = (stats.runMaxSpeed * movementAxis.x);

            Vector3 currentSpeed = physicsManager.forceMovement;

            if (Mathf.Abs(physicsManager.forceMovement.x) > Mathf.Abs(maxSpeed))
            {
                physicsManager.ApplyMovementFriction(stats.groundFriction);
            }
            else
            {
                float tempAcc = ((stats.runAcceleration * Mathf.Abs(movementAxis.x)) + stats.runBaseAcceleration)
                                * c.FaceDirection;

                currentSpeed.x += tempAcc;
                if (currentSpeed.x * c.FaceDirection > maxSpeed * c.FaceDirection)
                {
                    currentSpeed.x = maxSpeed;
                }
            }

            physicsManager.forceMovement = currentSpeed;

            c.SetFaceDirection((int)Mathf.Sign(movementAxis.x));

            CheckInterrupt();
        }
        private void HandleForce(Collider other)
        {
            EntityPhysicsManager epm = null;

            other.TryGetComponent <EntityPhysicsManager>(out epm);
            if (epm == null)
            {
                return;
            }

            Vector3 temp = epm.forceGravity + epm.forceMovement;

            switch (forceType)
            {
            case ForceType.Add:
                temp += CreateForce(other.GetComponent <EntityManager>());
                break;

            case ForceType.Set:
                Vector3 setTemp = CreateForce(other.GetComponent <EntityManager>());
                break;
            }

            if (maxMagnitude > 0 && temp.magnitude > maxMagnitude)
            {
                temp = temp.normalized * maxMagnitude;
            }

            epm.forceGravity.y = temp.y;
            temp.y             = 0;
            epm.forceMovement  = temp;
        }
Esempio n. 3
0
        public override bool Evaluate(uint frame, uint endFrame,
                                      CAF.Entities.EntityManager controller, AttackEventVariables variables)
        {
            EntityManager        e = (EntityManager)controller;
            EntityPhysicsManager physicsManager = (EntityPhysicsManager)controller.PhysicsManager;
            Vector3 f = Vector3.zero;

            if (xForce)
            {
                f.x = variables.floatVars[0] * e.FaceDirection;
            }
            if (yForce)
            {
                f.y = variables.floatVars[1];
            }

            if (yForce)
            {
                physicsManager.forceGravity.y = f.y;
            }
            if (xForce)
            {
                f.y = 0;
                physicsManager.forceMovement = f;
            }
            return(false);
        }
        public override void SimUpdate()
        {
            if (timer > 0)
            {
                timer--;
            }

            if (detectionArea.entities.Count > 0)
            {
                target = GetClosestTarget();

                EntityPhysicsManager epm = (EntityPhysicsManager)target.PhysicsManager;

                //transform.LookAt(target.transform.position + Vector3.up + epm.forceMovement);
                transform.LookAt(PredictPosition(target.gameObject) + Vector3.up);

                if (timer <= 0)
                {
                    danmakuConfig.position = transform.position;
                    danmakuConfig.rotation = transform.eulerAngles;
                    danmakuManager.Fire(danmaku, danmakuConfig, team, hitInfo);
                    timer = countdown;
                }
            }

            danmakuManager.Tick();
        }
        public override bool CheckInterrupt()
        {
            CharacterManager     c = GetCharacterController();
            EntityPhysicsManager physicsManager = (EntityPhysicsManager)GetPhysicsManager();
            CharacterStats       stats          = (CharacterStats)c.entityDefinition.GetEntityStats();

            if (c.StateManager.CurrentStateFrame == stats.enemyStepLength)
            {
                c.StateManager.ChangeState((int)EntityStates.AIR_JUMP);
                return(true);
            }
            if (c.TryAttack())
            {
                Vector2 movementInput = c.InputManager.GetAxis2D((int)EntityInputs.MOVEMENT);
                if (movementInput.magnitude > InputConstants.moveDeadzone)
                {
                    physicsManager.RedirectInertia(storedMovement.x, movementInput);
                }
                else
                {
                    physicsManager.forceMovement = storedMovement;
                }
                return(true);
            }
            return(false);
        }
        public override bool Evaluate(uint frame, uint endFrame,
                                      CAF.Entities.EntityManager controller, AttackEventVariables variables)
        {
            EntityPhysicsManager physicsManager = (EntityPhysicsManager)controller.PhysicsManager;

            physicsManager.forceMovement.x = Mathf.Clamp(physicsManager.forceMovement.x,
                                                         -variables.floatVars[0], variables.floatVars[0]);
            return(false);
        }
        public override void Initialize()
        {
            base.Initialize();
            CharacterManager     c = GetCharacterController();
            EntityPhysicsManager physicsManager = (EntityPhysicsManager)GetPhysicsManager();

            storedMovement = physicsManager.forceMovement;
            physicsManager.forceMovement = Vector3.zero;
            physicsManager.forceGravity  = Vector3.zero;
        }
Esempio n. 8
0
        public override bool Evaluate(uint frame, uint endFrame,
                                      CAF.Entities.EntityManager controller, AttackEventVariables variables)
        {
            EntityPhysicsManager physicsManager = (EntityPhysicsManager)controller.PhysicsManager;

            if (xFriction)
            {
                physicsManager.ApplyMovementFriction(variables.floatVars[0]);
            }
            if (yFriction)
            {
                physicsManager.ApplyGravityFriction(variables.floatVars[0]);
            }
            return(false);
        }
Esempio n. 9
0
        public override bool Evaluate(uint frame, uint endFrame,
                                      CAF.Entities.EntityManager controller, AttackEventVariables variables)
        {
            EntityPhysicsManager physicsManager = (EntityPhysicsManager)controller.PhysicsManager;

            if (controller.IsGrounded)
            {
                physicsManager.forceGravity = Vector3.zero;
                return(false);
            }
            EntityStats entityStats = ((TDAction.Entities.EntityManager)controller).entityDefinition.GetEntityStats();
            float       percent     = (float)frame / (float)endFrame;

            float gravity = entityStats.gravity;

            if (!useEntityGravity)
            {
                gravity = variables.curveVars[0].Evaluate(percent)
                          * variables.floatVars[0];
            }

            float gravityScale = physicsManager.GravityScale;

            if (!useEntityGravityScale)
            {
                gravityScale = variables.curveVars[1].Evaluate(percent)
                               * variables.floatVars[1];
            }

            float maxFallSpeed = entityStats.maxFallSpeed;

            if (!useEntityMaxFallSpeed)
            {
                maxFallSpeed = variables.curveVars[2].Evaluate(percent)
                               * variables.floatVars[2];
            }

            physicsManager.HandleGravity(maxFallSpeed, gravity, gravityScale);
            return(false);
        }