コード例 #1
0
ファイル: RiderFPC.cs プロジェクト: gylesis/Space-Maze
        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);
            }
        }
コード例 #2
0
ファイル: RiderFPC.cs プロジェクト: gylesis/Space-Maze
        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();
            }
        }
コード例 #3
0
        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");
            }
コード例 #4
0
ファイル: WaitTask.cs プロジェクト: gylesis/Space-Maze
 public override void UpdateTask(MAnimalBrain brain, int index)
 {
     if (MTools.ElapsedTime(brain.TasksTime[index], brain.TasksVars[index].floatValue))
     {
         brain.TaskDone(index);
     }
 }
コード例 #5
0
ファイル: InvokeEventTask.cs プロジェクト: gylesis/Space-Maze
 public override void UpdateTask(MAnimalBrain brain, int index)
 {
     if (MTools.ElapsedTime(brain.TasksTime[index], Delay))
     {
         Raise.Invoke();
         brain.TaskDone(index);
     }
 }
コード例 #6
0
 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);
         }
     }
 }
コード例 #7
0
 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);
         }
     }
 }
コード例 #8
0
ファイル: WaitDecision.cs プロジェクト: gylesis/Space-Maze
        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);
        }
コード例 #9
0
ファイル: Swim.cs プロジェクト: mkinahan/Moonman
 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();
         }
     }
 }
コード例 #10
0
ファイル: Fly.cs プロジェクト: mkinahan/Moonman
        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;
            }
        }
コード例 #11
0
ファイル: MoveStopTask.cs プロジェクト: gylesis/Space-Maze
 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);
     }
 }
コード例 #12
0
ファイル: JumpBasic.cs プロジェクト: mkinahan/Moonman
        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]");
            }
        }
コード例 #13
0
        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();
                }
            }
        }
コード例 #14
0
        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);
                }
            }
        }
コード例 #15
0
        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;
                }
            }
        }