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); }
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>(); }
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>(); } }
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>(); } }
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>(); }
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; } } } }
public Attitude GetAttitude(AiFraction fraction) { return(GetAttitude(fraction.fractionName)); }