Example #1
0
        private InformationNMCanFirePosition GetInfo(AIBrain ai)
        {
            InformationNMCanFirePosition        infoRetVal = null;
            List <InformationNMCanFirePosition> infos      = ai.GetSensor <SensorCanFireNMPositionFinder>().RequestAllInfo(ai);

            if (infos == null || infos.Count == 0)
            {
                return(null);
            }

            float closest = Mathf.Infinity;

            foreach (var info in infos)
            {
                if (Mathf.Abs(tryMoveAngle - info.angle.Value) < closest)
                {
                    infoRetVal = info;
                    closest    = Mathf.Abs(tryMoveAngle - info.angle.Value);
                }
            }

            if (Mathf.Abs(lastAngle - infoRetVal.angle.Value) > 90 || _dirChangeTime < 0)
            {
                tryMoveAngle = -tryMoveAngle;
                lastAngle    = tryMoveAngle;
                tryMoveAngle = 90 * Mathf.Sign(tryMoveAngle) + Mathf.Sign(tryMoveAngle) *
                               (tryMoveAngleOfTargetHealthMinMax.x + ai.InfoCurrentTarget.health.Confidence * (tryMoveAngleOfTargetHealthMinMax.y - tryMoveAngleOfTargetHealthMinMax.x));
                _dirChangeTime = Random.Range(dirChangeRandTimeMinMax.x, dirChangeRandTimeMinMax.y);
            }

            return(infoRetVal);
        }
Example #2
0
 public override void GeneralPostEffects(AIBrain ai)
 {
     infoMoveSide = null;
     ai.GetStateSystem <AIStateSystemMove>().StopMoving(ai);
     ai.GetStateSystem <AIStateSystemMove>().StopTurning(ai);
     ai.GetStateSystem <AIStateSystemLookAt>().StopLooking(ai);
     ai.GetStateSystem <AIStateSystemWeapon>().StopFiring(ai);
 }
Example #3
0
 public override void DeActivate(AIBrain ai)
 {
     infoMoveSide = null;
     ai.GetStateSystem <AIStateSystemMove>().StopMoving(ai);
     ai.GetStateSystem <AIStateSystemMove>().StopTurning(ai);
     ai.GetStateSystem <AIStateSystemLookAt>().StopLooking(ai);
     ai.GetStateSystem <AIStateSystemWeapon>().StopFiring(ai);
 }
Example #4
0
        public override bool CanActivate(AIBrain ai)
        {
            infoMoveSide = ai.GetSensor <SensorCanFireNMPositionFinder>().RequestInfo(ai);

            if (infoMoveSide != null && ai.HaveCurrentWeapon() && ai.HaveCurrentTarget())
            {
                return(true);
            }
            return(false);
        }
Example #5
0
        public override bool IsStillValid(AIBrain ai)
        {
            if (ai.GetStateSystem <AIStateSystemMove>().ReachedDestination(ai))
            {
                infoMoveSide = GetInfo(ai);
                if (infoMoveSide == null)
                {
                    return(false);
                }
            }

            return(true);
        }
Example #6
0
        public override void Activate(AIBrain ai)
        {
            float sign = Random.value > .5f ? 1 : -1;

            tryMoveAngle = sign;
            tryMoveAngle = 90 * Mathf.Sign(tryMoveAngle) + Mathf.Sign(tryMoveAngle) *
                           (tryMoveAngleOfTargetHealthMinMax.x + ai.InfoCurrentTarget.health.Confidence *
                            (tryMoveAngleOfTargetHealthMinMax.y - tryMoveAngleOfTargetHealthMinMax.x));

            ai.GetStateSystem <AIStateSystemMove>().SetMoveToPositionNStartMove(ai, ET.MoveType.Walk, ET.MoveToType.ToPosition, infoMoveSide.positionEstimated.Value);

            _dirChangeTime = Random.Range(dirChangeRandTimeMinMax.x, dirChangeRandTimeMinMax.y);
            lastAngle      = tryMoveAngle;
            infoMoveSide   = GetInfo(ai);

            ai.GetStateSystem <AIStateSystemWeapon>().StartFiring(ai);
            ai.GetStateSystem <AIStateSystemMove>().SetTurnToPosNStartTurn(ai, ET.TurnToType.ToCurrentTarget);
            ai.GetStateSystem <AIStateSystemLookAt>().SetLookAtPosNStartLook(ai, ET.LookAtType.ToCurrentTarget);
            _finishTime = Random.Range(randomFinishTimeBw.x, randomFinishTimeBw.y);
        }
Example #7
0
        private void GetMovePos(AIBrain ai)
        {
            List <InformationNMCanFirePosition> infos = ai.GetSensor <SensorCanFireNMPositionFinder>().RequestAllInfo(ai);

            if (infos != null && infos.Count > 0)
            {
                float maxConf = -1;
                foreach (var info in infos)
                {
                    float distFromSelf = Vector3.Distance(ai.Transform.position, info.positionEstimated.Value);
                    float distSelfConf = 1 - Mathf.Clamp01(distFromSelf / 10);

                    float distFromTarget = Vector3.Distance(ai.GetCurrentTargetPos(), info.positionEstimated.Value);
                    float distTargetConf = Mathf.Clamp01(distFromTarget / 10);

                    float tempOveralConf = (distSelfConf + distTargetConf) / 2;
                    if (tempOveralConf > maxConf)
                    {
                        infoMovePos = info;
                        maxConf     = tempOveralConf;
                    }
                }
            }
        }