public override bool Validate(SearchingArea searchingArea, DetectionArea detectionArea) { Vector3 positionWithOffset = searchingArea.Socket.position + searchingArea.Data.Offset; Vector3 vectorSubtraction = detectionArea.transform.position - positionWithOffset; return(!(Physics.Raycast(positionWithOffset, vectorSubtraction.normalized, vectorSubtraction.magnitude, searchingArea.Data.ObstacleMask))); }
#pragma warning restore 0649 public override void Visualize(SearchingArea searchingArea, DetectionArea detectionArea) { #if UNITY_EDITOR Debug.DrawLine(searchingArea.Socket.position + searchingArea.Data.Offset, detectionArea.transform.position, _lineColor, _lineLifetime); #endif }
public void OnAreaExit(DetectionArea area, Collider2D collider) { if (area == Cage) { Angry(false); Disable(false); } }
public void OnAreaEnter(DetectionArea area, Collider2D collider) { if (area == Cage) { Angry(true); Disable(true); } }
public void OnAreaExit(DetectionArea area, Collider2D collider) { if (area == princessBin) { OpenPrincessGate(); CloseGateToFreedom(); } }
public void OnAreaEnter(DetectionArea area, Collider2D collider) { if (area == princessBin) { ClosePrincessGate(); OpenGateToFreedom(); } }
public override bool Validate(SearchingArea searchingArea, DetectionArea detectionArea) { Vector3 forwardRotation = Quaternion.Euler(searchingArea.Data.Rotation) * searchingArea.Socket.forward; Vector3 positionWithOffset = searchingArea.Socket.position + searchingArea.Data.Offset; Vector3 vectorSubtraction = detectionArea.transform.position - positionWithOffset; return(!((searchingArea.Data.Angle != 360) && (Vector2.Angle(new Vector2(vectorSubtraction.x, vectorSubtraction.z), new Vector2(forwardRotation.x, forwardRotation.z)) > searchingArea.Data.Angle / 2))); }
public override bool Validate(SearchingArea searchingArea, DetectionArea detectionArea) { return(!((detectionArea.State == LazyBot.Area.Data.HitAreaState.Disabled) || (detectionArea.State == LazyBot.Area.Data.HitAreaState.Unknown))); }
/// <summary> /// This function creates detection areas. It will creates as many areas as needed to have an /// average of 20 components per area. /// </summary> public void CreateAreas() { //this function divides the image into areas so that each area contains //on average 20 rectangles. This helps to speed up the process of finding //the closest rectangle. m_Areas = new List <DetectionArea>(10); DetectionArea Area; Point Center; int nDividerLinesX, nDividerLinesY; int nAreas; int AreaWidth, AreaHeight; int AreaNumber; //calculate the number of dividerlines necessary to make up the desired //number of 20 rectangles per area nAreas = Image.Components.Count / 20; if (nAreas < 1) { nAreas = 1; } //determine the desired size of the areas. nDividerLinesX = 0; nDividerLinesY = 0; while (((nDividerLinesX + 1) * (nDividerLinesY + 1)) < nAreas) { nDividerLinesX++; nDividerLinesY = (nDividerLinesX * Image.Height) / Image.Width; } NumberAreasX = nDividerLinesX + 1; int NumberAreasY = nDividerLinesY + 1; AreaWidth = Image.Width / NumberAreasX; AreaHeight = Image.Height / NumberAreasY; if (AreaWidth <= 0) { throw new ApplicationException("DetectSentences: AreaWidth<=0"); } if (AreaHeight <= 0) { throw new ApplicationException("DetectSentences: AreaHeight<=0"); } NumberAreasX++; NumberAreasY++; //create the areas for (int Y = 0; Y < NumberAreasY; Y++) { for (int X = 0; X < NumberAreasX; X++) { Area = new DetectionArea(); Area.Area.X = X * AreaWidth; Area.Area.Y = Y * AreaHeight; if (X == nDividerLinesX) { Area.Area.Width = Image.Width - X * AreaWidth; } else { Area.Area.Width = AreaWidth; } if (X == nDividerLinesX) { Area.Area.Height = Image.Height - Y * AreaHeight; } else { Area.Area.Height = AreaHeight; } m_Areas.Add(Area); } } nAreas = NumberAreasX * NumberAreasY; //assign an area to every rectangle foreach (PageComponent Component in Image.Components) { Center = Component.CenterPoint; AreaNumber = (Center.X / AreaWidth); AreaNumber = AreaNumber + (NumberAreasX * (Center.Y / AreaHeight)); if (AreaNumber >= m_Areas.Count) { throw new ApplicationException("DetectSentences: Invalid Area number"); } Component.DetectionAreaIndex = AreaNumber; //add the component to the area m_Areas[AreaNumber].Components.Add(Component); } }
public override bool Validate(SearchingArea searchingArea, DetectionArea detectionArea) { Vector3 positionWithOffset = searchingArea.Socket.position + searchingArea.Data.Offset; return(!((detectionArea.transform.position - positionWithOffset).magnitude > searchingArea.Data.Radius)); }
protected virtual void Awake() { ignoredColliders = new List <Collider>(); _transform = GetComponent <Transform>(); detectionArea = GetComponent <DetectionArea>(); }
public override bool Validate(SearchingArea searchingArea, DetectionArea detectionArea) { return(!(((1 << detectionArea.Collider.gameObject.layer) & searchingArea.Data.TargetMask) == 0)); }
void Awake() { princessGateAnimator = transform.FindChild("PrincessGate").GetComponent <Animator>(); gateToFreedomAnimator = transform.FindChild("GateToFreedom").GetComponent <Animator>(); princessBin = transform.FindChild("PrincessBin").gameObject.GetComponent <DetectionArea>(); }