Beispiel #1
0
        public void Update(IEnumerable <GameObject> gameObjs)
        {
            var curVision = new Tuple <GameObject, float> [EyeCount];

            foreach (var curObj in gameObjs)
            {
                var dist = Vector2.Distance(Owner.CenterPosition, curObj.CenterPosition) - Owner.Radius - curObj.Radius;
                if (dist < VisionDistance)
                {
                    var curObjRelAngle = GeomHelper.Angle(Owner.CenterPosition, curObj.CenterPosition);

                    var closestEyeAngleIndex = -1;
                    var closestEyeAngleDif   = float.MaxValue;
                    for (int ei = 0; ei < EyeCount; ei++)
                    {
                        var relEyeAngle = EyeAngles[ei] + Owner.Rotation;
                        var anglDif     = Math.Abs(GeomHelper.RadRange_TwoPi(curObjRelAngle) - GeomHelper.RadRange_TwoPi(relEyeAngle));
                        if (anglDif < closestEyeAngleDif && anglDif < EyeSeparationAngle / 2)
                        {
                            closestEyeAngleIndex = ei;
                            closestEyeAngleDif   = anglDif;
                        }
                    }
                    if (closestEyeAngleIndex != -1)
                    {
                        curVision[closestEyeAngleIndex] = Tuple.Create(curObj, dist);
                    }
                }
            }

            for (int ei = 0; ei < EyeCount; ei++)
            {
                var curVis = curVision[ei];
                if (curVis != null)
                {
                    var col       = GetColor(curVis.Item1);
                    var closeness = 1 - (curVis.Item2 / VisionDistance);
                    Visible[ei] = new Vector3(col.X, col.Y, closeness);
                }
                else
                {
                    Visible[ei] = Vector3.Zero;
                }
            }
        }