public override void MountAnimal() { if (!CanMount) { return; } if (!MTools.ElapsedTime(TimeToMountDismount, CurrentTime)) { return; } if (debug) { Debug.Log($"<b>{name}:<color=cyan> [Mount Animal] </color> </b>"); //Debug } Start_Mounting(); CurrentTime = Time.time; MainCollider.enabled = false; if (MountTime > 0) { StartCoroutine(C_MountAnim()); } else { UpdateRiderTransform(); Vector3 AnimalForward = Vector3.ProjectOnPlane(Montura.transform.forward, Montura.Animal.UpVector); transform.rotation = Quaternion.LookRotation(AnimalForward, -Physics.gravity); } }
public override void DismountAnimal() { if (!CanDismount) { return; } if (!MTools.ElapsedTime(TimeToMountDismount, CurrentTime)) { return; } MountTrigger = GetDismountTrigger(); CurrentTime = Time.time; Start_Dismounting(); MainCollider.enabled = false; if (MountTime > 0) { StartCoroutine(C_DismountAnim()); } else { if (debug) { Debug.Log($"<b>{name}:<color=cyan> [Dismount Animal] </color> </b>"); //Debug } transform.position = new Vector3(MountTrigger.transform.position.x, transform.position.y, MountTrigger.transform.position.z); if (RB) { RB.velocity = Vector3.zero; } End_Dismounting(); } }
public override void TryExitState(float deltaTime) { if (!ActivateJumpLogic) { return; //The Jump logic has not being activated yet } if (!MTools.ElapsedTime(StartedJumpLogicTime, 0.05f)) { return; } var GoingDown = Vector3.Dot(animal.DeltaPos, animal.Gravity) > 0; //Check if is falling down var Gravity = animal.Gravity; if (GoingDown && Physics.Raycast(animal.Main_Pivot_Point, Gravity, out RaycastHit land, animal.Height, animal.GroundLayer, IgnoreTrigger)) { AllowExit(); animal.Grounded = true; animal.UseGravity = false; var GroundedPos = Vector3.Project(land.point - animal.transform.position, Gravity); //IMPORTANT animal.Teleport_Internal(animal.transform.position + GroundedPos); //SUPER IMPORTANT!!! animal.ResetUPVector(); //IMPORTAAANT! Debugging("[Allow Exit] - Grounded"); }
public override void UpdateTask(MAnimalBrain brain, int index) { if (MTools.ElapsedTime(brain.TasksTime[index], brain.TasksVars[index].floatValue)) { brain.TaskDone(index); } }
public override void UpdateTask(MAnimalBrain brain, int index) { if (MTools.ElapsedTime(brain.TasksTime[index], Delay)) { Raise.Invoke(); brain.TaskDone(index); } }
public override void UpdateTask(MAnimalBrain brain, int index) { if (when == ExecuteTask.OnUpdate) { if (MTools.ElapsedTime(brain.TasksTime[index], interval)) { Execute_Task(brain); brain.SetElapsedTaskTime(index); } } }
public override void UpdateTask(MAnimalBrain brain, int index) { if (Play == ExecuteTask.OnUpdate) //If the animal is in range of the Target { if (MTools.ElapsedTime(brain.TasksTime[index], CoolDown)) { StateActivate(brain); brain.SetElapsedTaskTime(index); } } }
public override bool Decide(MAnimalBrain brain, int Index) { var WaitTime = brain.DecisionsVars[Index].floatValue; bool timepassed = MTools.ElapsedTime(brain.StateLastTime, WaitTime); //#if UNITY_EDITOR // if (timepassed && brain.debug) // Debug.Log(brain.Animal.name + "Wait Decision waited: <b>[" + WaitTime + "]</b> seconds"); //#endif return(timepassed); }
public override void TryExitState(float DeltaTime) { if (MTools.ElapsedTime(EnterWaterTime, TryExitTime)) //do not try to exit if the animal just enter the water { CheckWater(); if (!IsInWater) { Debugging("[Allow Exit] No Longer in water"); animal.CheckIfGrounded(); AllowExit(); } } }
void AutoGliding() { if (MTools.ElapsedTime(FlyStyleTime, AutoGlide_CurrentTime)) { AutoGlide_CurrentTime = Time.time; isGliding ^= true; FlyStyleTime = isGliding ? GlideChance.RandomValue : FlapChange.RandomValue; var newGlideSpeed = Random.Range(GlideSpeed - Variation, GlideSpeed); var newFlapSpeed = Random.Range(FlapSpeed, FlapSpeed + Variation); animal.currentSpeedModifier.Vertical = isGliding ? newGlideSpeed : newFlapSpeed; } }
public override void UpdateTask(MAnimalBrain brain, int index) { if (interval > 0) { if (MTools.ElapsedTime(brain.TasksTime[index], interval)) { UpdateMovementTask(brain, index); brain.SetElapsedTaskTime(index); } } else { UpdateMovementTask(brain, index); } }
public override void TryExitState(float deltaTime) { if (JumpPressed.Value && !InputValue) { AllowExit(); } else if (MTools.ElapsedTime(StartedJumpLogicTime, activeJump.JumpTime) && ActivateJumpLogic) { AllowExit(); CanJumpAgain = true; animal.State_Activate(StateEnum.Fall); //Seems Important GravityTime = 0; Debugging("[Allow Exit]"); } }
public override void TryExitState(float DeltaTime) { if (MTools.ElapsedTime(EnterWaterTime, TryExitTime)) //do not try to exit if the animal just enter the water { SwimState.CheckWater(); SwimState.FindWaterLevel(); //Debug.Log($"PivotAboveWater {SwimState.PivotAboveWater} "); //Debug.Log($"IsInWater {SwimState.IsInWater} "); if (SwimState.PivotAboveWater || !SwimState.IsInWater) { Debugging("[Allow Exit]"); AllowExit(); } } }
public virtual void TransitionToState(MAIState nextState, bool decisionValue, MAIDecision decision, int Index) { if (MTools.ElapsedTime(TransitionLastTime, TransitionCoolDown)) //This avoid making transition on the same Frame ****IMPORTANT { if (nextState != null && nextState != remainInState && nextState != currentState) //Do not transition to itself! { TransitionLastTime = Time.time; decision.FinishDecision(this, Index); Debuging($"<color=white>Changed AI State from <B>[{currentState.name}]</B> to <B>[{nextState.name}]</B>. Decision: <b>[{decision.name}]</b> = <B>[{decisionValue}]</B>.</color>"); InvokeDecisionEvent(decisionValue, decision); StartNewState(nextState); } } }
public override void UpdateTask(MAnimalBrain brain, int index) { if (Play == PlayWhen.Forever) //If the animal is in range of the Target { if (near && !brain.ArrivedToTarget) { return; //Dont play if Play on target is true but we are not near the target. } if (MTools.ElapsedTime(brain.TasksTime[index], CoolDown)) { PlayMode(brain); brain.SetElapsedTaskTime(index); } } else { switch (affect) { case Affected.Self: if (!brain.Animal.IsPlayingMode) { brain.TaskDone(index); } break; case Affected.Target: if (brain.TargetAnimal && !brain.TargetAnimal.IsPlayingMode) { brain.TaskDone(index); } break; default: break; } } }