private void OnCollisionEnter(Collision collision) { // Nota: Igual hay que aplicar este cambio también por tiempo if (currentDamping == DampingType.None) { currentDamping = DampingType.TwoDimensional; } }
public RigidBodyData() { inertia = TSMatrix.InternalIdentity; invInertia = TSMatrix.InternalIdentity; invInertiaWorld = TSMatrix.InternalIdentity; orientation = TSMatrix.InternalIdentity; invOrientation = TSMatrix.InternalIdentity; position = TSVector.zero; linearVelocity = TSVector.zero; angularVelocity = TSVector.zero; staticFriction = FP.Zero; restitution = FP.Zero; boundingBox = new TSBBox(); inactiveTime = FP.Zero; isActive = true; isStatic = false; isKinematic = false; affectedByGravity = true; isColliderOnly = false; inverseMass = FP.Zero; force = TSVector.zero; torque = TSVector.zero; hashCode = 0; internalIndex = 0; marker = 0; disabled = false; _freezePosition = TSVector.zero; _freezeRotation = TSMatrix.InternalIdentity; _freezeRotationQuat = TSQuaternion.identity; // Previous state of gravity before switch Kinematic to true prevKinematicGravity = false; linearDrag = FP.Zero; angularDrag = FP.Zero; isParticle = false; shape = new ShapeData(); damping = DampingType.Angular | DampingType.Linear; }
// public void ChangeDampingType(DampingType newDampingType) { currentDamping = newDampingType; not2dDCurrentDuration = 0; // Problemente pongamos también efecto de sonido de frenazo }
/// <summary> /// /// </summary> void AxisMotion(float dt) { // Primero pillamos el eje del joystick Vector2 movementAxis = inputManager.StickAxis; // TODO: Decidir si aplicar aqui el countdown del damping if (currentDamping != DampingType.TwoDimensional) { // not2dDCurrentDuration += dt; if (not2dDCurrentDuration > not2dDMaxDuration) { currentDamping = DampingType.TwoDimensional; not2dDCurrentDuration = 0; } } // Vector3 directionZ = mainCamera.forward * movementAxis.y; Vector3 directionX = mainCamera.right * movementAxis.x; // First check sprint float sprintMultiplier = 1; Vector3 currentUp = Vector3.up; // if (gameManager.playerAttributes.unlockedSprintActions > 0) { RaycastHit adherencePoint; // TODO: Meter aqui el dash cuando otra habilidad está cargando if (inputManager.SprintButton && actionCharging != ActionCharguing.None && actionCharging != ActionCharguing.Sprint) { repulsor.RepulsorDash(directionX + directionZ); } // if (inputManager.SprintButton && actionCharging == ActionCharguing.None) { switch (sprintMode) { case SprintMode.Normal: actionCharging = ActionCharguing.Sprint; break; //case SprintMode.RepulsorDash: // // TODO: Aquí haremos el impulso // // Más abajo están los parámetros que necesitamos // // Ahora pilla la velocidad en xz, probablemene quermos aplicarlo en la dirección del eje // repulsor.RepulsorDash(directionX + directionZ); // break; case SprintMode.Adherence: // Let's check if there are a surface near if (AdherenceCheck(out adherencePoint) != false) { // Trabajamos con el punto y la normal //adherencePoint.normal actionCharging = ActionCharguing.Sprint; SetNewUp(adherencePoint.point, adherencePoint.normal); currentUp = adherencePoint.normal; chargedAmount = 1; adhering = true; //cameraControl. Debug.Log("Adherence point found"); } break; } } else if (inputManager.SprintButton && actionCharging == ActionCharguing.Sprint) { switch (sprintMode) { case SprintMode.Normal: // De momento el multiplicador irá de 1 a 2 chargedAmount += Time.deltaTime; chargedAmount = Mathf.Min(chargedAmount, gameManager.playerAttributes.maxCharge); sprintMultiplier += chargedAmount; break; case SprintMode.Adherence: if (AdherenceCheck(out adherencePoint) != false) { // Trabajamos con el punto y la normal //adherencePoint.normal SetNewUp(adherencePoint.point, adherencePoint.normal); currentUp = adherencePoint.normal; Vector3 gravityForce = Vector3.up * -rb.velocity.y; Vector3 adherenceForce = -transform.up * 1; rb.AddForce(gravityForce + adherenceForce, ForceMode.Impulse); //chargedAmount = 1; //cameraControl. Debug.Log("Adherenring to something"); } else { Debug.Log("Adherenrce lost"); chargedAmount = 0; actionCharging = ActionCharguing.None; adhering = false; } break; } } else if (chargedAmount > 0 && actionCharging == ActionCharguing.Sprint) { // if (sprintMode == SprintMode.Normal && chargedAmount < 0.2f) { repulsor.RepulsorDash(directionX + directionZ); } // chargedAmount = 0; actionCharging = ActionCharguing.None; adhering = false; } } // The movement direction will depend on the current up directionZ = Vector3.ProjectOnPlane(directionZ, currentUp).normalized; directionX = Vector3.ProjectOnPlane(directionX, currentUp).normalized; // En estos casos el player estará encarado con el objetivo if (actionCharging == ActionCharguing.Attack || (actionCharging == ActionCharguing.Defense && defenseMode == DefenseMode.Front) || (actionCharging == ActionCharguing.Jump && jumpMode == JumpMode.Smash)) { // Si no targetea al player // Osea un enemigo // Puesto aqui por si sacamos más casos (cinematicas por ejemplo) if (!cameraControl.TargetingPlayer) { // // TODO: Ajustar el stimated para que pille bien Vector3 pointToLook = EnemyAnalyzer.estimatedToHitPosition; transform.LookAt(pointToLook, currentUp); } else { //transform.LookAt(transform.position + cameraControl.transform.forward, currentUp); transform.rotation = mainCamera.rotation; } } else { // Para que ajuste la rotación poco a poco if ((directionX + directionZ).magnitude > Mathf.Epsilon) { currentRotationTime = 0; lastAxisXZ = directionX + directionZ; } // objectiveRotation = Quaternion.LookRotation(lastAxisXZ, currentUp); currentRotationTime += dt; transform.rotation = Quaternion.Slerp(transform.rotation, objectiveRotation, currentRotationTime / rotationTime); //transform.LookAt(transform.position + directionX + directionZ, currentUp); } // TODO: Tener en cuenta velocity actual Vector3 forceDirection = (directionX + directionZ).normalized; rb.AddForce(forceDirection * gameManager.playerAttributes.movementForcePerSecond * sprintMultiplier * dt, ForceMode.Impulse); // And dampen de movement if (currentDamping == DampingType.TwoDimensional) { Vector3 currentVelocity = rb.velocity; currentVelocity.x *= 1 - (damping * dt); currentVelocity.z *= 1 - (damping * dt); rb.velocity = currentVelocity; } else if (currentDamping == DampingType.ThreeDimensional) { // rb.velocity *= 1 - (damping * dt); } }