Exemple #1
0
    public EAttitude GetAttitude(AiFraction fraction)
    {
        if (Equals(fraction))
        {
            return(EAttitude.EFriendly);
        }

        foreach (var it in friendlyFractions)
        {
            if (it.Equals(fraction))
            {
                return(EAttitude.EFriendly);
            }
        }

        foreach (var it in enemyFractions)
        {
            if (it.Equals(fraction))
            {
                return(EAttitude.EEnemy);
            }
        }

        return(EAttitude.ENeutral);
    }
Exemple #2
0
 protected void Start()
 {
     if (!fraction)
     {
         fraction = GetComponent <AiFraction>();
     }
 }
 // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
 override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
 {
     thrown = false;
     cdSpawn.restart();
     animator.GetComponentInParent <AiMovement>().SetRotationPoint(new Vector2(animator.GetFloat("aimX"), animator.GetFloat("aimY")));
     fraction = animator.GetComponentInParent <AiFraction>();
 }
Exemple #4
0
 public new void Start()
 {
     base.Start();
     _instigator = GetComponentInParent <AiPerceiveUnit>();
     if (propagateFraction)
     {
         _fraction = GetComponentInParent <AiFraction>();
     }
 }
 private void Start()
 {
     if (!objToRemove)
     {
         objToRemove = gameObject;
     }
     if (!instigator)
     {
         instigator = gameObject;
     }
     myFraction = instigator.GetComponent <AiFraction>();
 }
    new void Start()
    {
        base.Start();
        _transform = transform;
        //rotationApplyTime.actualTime += 10000000000000000000;


        _instigator = GetComponentInParent <AiPerceiveUnit>();
        if (propagateFraction)
        {
            _fraction = GetComponentInParent <AiFraction>();
        }
    }
Exemple #7
0
    private void Start()
    {
        perception = GetComponent <AiPerceptionHolder>();
        fraction   = GetComponentInParent <AiFraction>();

        chances = new float[] {
            Random.Range(0.05f, 0.45f) * Random.Range(0.05f, 0.45f),
            Random.Range(0.05f, 0.45f) * Random.Range(0.05f, 0.45f),
            Random.Range(0.05f, 0.45f) * Random.Range(0.05f, 0.45f),
            Random.Range(0.05f, 0.45f) * Random.Range(0.05f, 0.45f)
        };
        //chances = new float[] { 0.5f, 0.5f, 0.5f, 0.5f };
        //chances = new float[] { 0.6f, 0.9f, 0.6f, 0.75f };
        //chances = new float[] { 0.95f, 0.5f, 0.85f, 0.35f };
        Debug.Log(chances[0] + ", " + chances[1] + ", " + chances[2] + "," + chances[3]);
    }
    protected void Start()
    {
        if (!fraction)
        {
            fraction = GetComponent <AiFraction>();
        }

        if (!health)
        {
            health = GetComponent <HealthController>();
        }

        if (!mind)
        {
            mind = GetComponent <AiUnitMind>();
        }
    }
Exemple #9
0
    void PerformSearch()
    {
        AiFraction myFraction = myUnit.fraction;

        if (!myFraction)
        {
#if UNITY_EDITOR
            Debug.LogWarning("No fraction in perceive unit but trying to use sight");
#endif
            // there's no way to determine where to put events
            return;
        }

        // perform cast
        int n = Physics2D.OverlapCircleNonAlloc(transform.position, searchDistance, StaticCacheLists.colliderCache, memorableMask);

        // preselect targets
        // they have to be in proper angle and contain PerceiveUnit
        for (int i = 0; i < n; ++i)
        {
            var       it          = StaticCacheLists.colliderCache[i];
            Transform itTransform = it.transform;

            //// check if the target is in proper angle
            Vector2 toIt     = itTransform.position - transform.position;
            float   cosAngle = Vector2.Dot(toIt.normalized, transform.up);
            float   angle    = Mathf.Acos(cosAngle) * 180 / Mathf.PI;
            //Debug.Log(angle);
            bool bProperAngle = angle < coneAngle * 0.5f;
            if (!bProperAngle)
            {
                continue;
            }

            // ok, now check if it has AiPerceiveUnit
            // we need it's fraction to determine our attitude

            AiPerceiveUnit perceiveUnit = it.GetComponent <AiPerceiveUnit>();
            if (perceiveUnit == myUnit)
            {
                // oh, come on do not look at yourself... don't be soo narcissistic
                continue;
            }

            if (!perceiveUnit)
            {
                // no perceive unit, this target is invisible to us
                continue;
            }

            AiFraction itFraction = perceiveUnit.fraction;
            if (!itFraction)
            {
                // the same as above,
                return;
            }

            //// determine attitude
            AiFraction.EAttitude attitude = myFraction.GetAttitude(itFraction);

            //// Check if obstacles blocks vision
            if (DoObstaclesBlockVision(itTransform.position))
            {
                continue;
            }

            //// create event
            MemoryEvent ev = new MemoryEvent();
            ev.exactPosition = itTransform.position;
            ev.forward       = itTransform.up;
            // if collider has rigidbody then take its velocity
            // otherwise there is no simple way to determine event velocity
            ev.velocity = it.attachedRigidbody ? it.attachedRigidbody.velocity * velocityPredictionScale : Vector2.zero;

            // set up agent reponsible for this event
            ev.perceiveUnit = perceiveUnit;

            // ensure event will tick from now on
            ev.lifetimeTimer.Restart();


            Debug.DrawRay(ev.exactPosition, Vector3.up, Color.blue, searchTime * nEvents);
            Debug.DrawRay(ev.exactPosition, ev.velocity * searchTime, Color.gray, searchTime);
            InsertEvent(ev, attitude);
        }
    }
 void Start()
 {
     rb         = GetComponent <Rigidbody2D>();
     perception = GetComponent <AiPerceptionHolder>();
     fraction   = GetComponent <AiFraction>();
 }
Exemple #11
0
    public void PerformSearch()
    {
        AiFraction myFraction = myUnit.fraction;

        if (!myFraction)
        {
            return; /// no point in recording enemy && ally
        }
        float searchDistance = this.searchDistance;


        float angleOffset = coneRadius * Random.value;

        int nRays = Physics2D.RaycastNonAlloc(transform.position, Quaternion.Euler(0, 0, -coneRadius * 0.5f + angleOffset + addictionalRotation) * transform.up, rays, searchDistance);

        Debug.DrawRay(transform.position, Quaternion.Euler(0, 0, -coneRadius * 0.5f + angleOffset + addictionalRotation) * transform.up * searchDistance, Color.green, 0.25f);

        var rayList = new List <RaycastHit2D>(rays);

        rayList.Sort(0, nRays, compareRays);


        foreach (var it in rayList)
        {
            if (it.collider)
            {
                var unit = it.collider.GetComponent <AiPerceiveUnit>();
                if (unit && unit != myUnit)
                {
                    if (it.distance > searchDistance)
                    {
                        return;
                    }

                    if (it.distance * unit.distanceModificator > searchDistance)
                    {
                        if (unit.blocksVision)
                        {
                            return;
                        }

                        searchDistance *= unit.transparencyLevel;
                        continue;
                    }

                    var fraction = unit.fraction;
                    if (!fraction)
                    {
                        if (unit.blocksVision)
                        {
                            return;
                        }

                        searchDistance *= unit.transparencyLevel;
                        continue;
                    }

                    var eventType = ConvertAttitudeToEventType(myFraction.GetAttitude(fraction));
                    if (eventType == EMemoryEvent.ECount)
                    { /// cant convert
                        if (unit.blocksVision)
                        {
                            return;
                        }

                        searchDistance *= unit.transparencyLevel;
                        continue;
                    }

                    holder.InsertToMemory(unit, eventType,
                                          unit.transform.position, predictionScale, memoryTime, matureTime, shadeTime, priority);

                    if (unit.blocksVision)
                    {
                        return;
                    }

                    searchDistance *= unit.transparencyLevel;
                }
            }
        }
    }
Exemple #12
0
 public Attitude GetAttitude(AiFraction fraction)
 {
     return(GetAttitude(fraction.fractionName));
 }