예제 #1
0
        public void Tick()
        {
            if (Visible)
            {
                return;
            }

            //memory.SetText("Memory " + (int) (System.Diagnostics.Process.GetCurrentProcess().PrivateMemorySize64 / 1024f) + " KB");
            //memory.SetText("Public Memory " + (int)(GC.GetTotalMemory(false) / 1024f) + " KB");
            visibility.SetText(CameraVisibility.TilesVisible() + " Tiles visible");

            if (Window.GlobalTick % 10 != 0)
            {
                return;
            }

            var tps = PerfInfo.AverageTPS();

            tick.SetColor(getColor(tps, Settings.UpdatesPerSecond));
            tick.SetText("Tick " + tps.ToString("F1") + " @ " + PerfInfo.TMS.ToString("00") + " ms");

            var frameCount = Settings.FrameLimiter == 0 ? ScreenInfo.ScreenRefreshRate : Settings.FrameLimiter;

            var fps = PerfInfo.AverageFPS();

            render.SetColor(getColor(fps, frameCount));
            render.SetText("Render " + fps.ToString("F1") + " @ " + PerfInfo.FMS.ToString("00") + " ms");
        }
예제 #2
0
        public void FinishPlayerSwitch(Actor @new)
        {
            LocalPlayer.FollowupActor = @new;
            LocalPlayer = @new;
            Add(@new);

            CameraVisibility.ShroudUpdated();
        }
예제 #3
0
        public static void Reset(Game @new)
        {
            game  = @new;
            world = game.World;

            CameraVisibility.Reset();
            Camera.Reset();

            ClearRenderLists();
        }
예제 #4
0
        public void Load()
        {
            Camera.SetBounds(Bounds);
            CameraVisibility.SetBounds(this, world.ShroudLayer);

            var mapLoader = new MapLoader(world, this);

            mapLoader.Generate();
            mapLoader.Apply();
        }
예제 #5
0
        public bool CheckVisibility(bool checkEdges = false)
        {
            renderable.Visible = CameraVisibility.IsVisible(Position);
            if (!firstChecked || checkEdges)
            {
                CheckEdgeVisibility();
                firstChecked = true;
            }

            return(renderable.Visible);
        }
예제 #6
0
        public bool CheckVisibility()
        {
            if (renderable == null || Dissolved)
            {
                Visible = false;
                return(Visible);
            }

            Visible = CameraVisibility.IsVisible(Position);
            return(Visible);
        }
예제 #7
0
        void changeState(int x, int y, bool value)
        {
            foreach (var shroud in listenerPositions[new MPos(x, y)])
            {
                if (shroud.ChangeState(value))
                {
                    changingShroud.Add(shroud);
                }
            }

            if (value)
            {
                CameraVisibility.ShroudRevealed(x / 2, y / 2);
            }
        }
예제 #8
0
        public override bool CheckVisibility()
        {
            if (Disposed)
            {
                return(false);
            }

            if (WorldPart != null)
            {
                Visible = CameraVisibility.IsVisible(GraphicPosition + WorldPart.VisibilityBoxOffset, WorldPart.VisibilityBox);
            }
            else
            {
                Visible = CameraVisibility.IsVisible(GraphicPosition, new MPos(512, 512));
            }

            return(Visible);
        }
예제 #9
0
        public Actor FindValidTarget(CPos pos, int team = Actor.PlayerTeam)
        {
            const int range = 1024;

            if (KeyInput.IsKeyDown(Keys.LeftShift))
            {
                return(null);
            }

            // Look for actors in range.
            var   sectors      = self.World.ActorLayer.GetSectors(pos, range);
            var   currentRange = long.MaxValue;
            Actor validTarget  = null;

            foreach (var sector in sectors)
            {
                foreach (var actor in sector.Actors)
                {
                    if (actor.Team == team || actor.WorldPart == null || !CameraVisibility.IsVisible(actor.Position))
                    {
                        continue;
                    }

                    var targetPart = actor.GetPartOrDefault <TargetablePart>();
                    if (targetPart == null || !targetPart.InTargetBox(pos))
                    {
                        continue;
                    }

                    var dist = (actor.Position - pos).SquaredFlatDist;
                    if (dist < currentRange)
                    {
                        currentRange = dist;
                        validTarget  = actor;
                    }
                }
            }

            return(validTarget);
        }
예제 #10
0
    private void Update()
    {
        if (!recording)
        {
            return;
        }
        timeElapsedSec += Time.deltaTime;
        if (timeElapsedSec < RecordDelaySec)
        {
            return;
        }
        timeElapsedSec = 0f;
        if (Camera.main == null)
        {
            return;
        }
        Transform transform = Camera.main.transform;
        Vector3   position  = Camera.main.transform.position;
        Vector3   forward   = Camera.main.transform.forward;

        if (!(lastCamVisibility.Position == position) || !(lastCamVisibility.Forward == forward))
        {
            CameraVisibility cameraVisibility = default(CameraVisibility);
            cameraVisibility.Position    = position;
            cameraVisibility.Forward     = forward.normalized;
            cameraVisibility.Up          = transform.up;
            cameraVisibility.Right       = transform.right;
            camVisibilities[camVisIndex] = cameraVisibility;
            camVisIndex++;
            lastCamVisibility = cameraVisibility;
            if (camVisIndex == MaxEntries)
            {
                StopRecording();
            }
        }
    }
예제 #11
0
    private List <CameraVisibility> collapseVisibilities()
    {
        int num  = int.MaxValue;
        int num2 = int.MinValue;
        int num3 = int.MaxValue;
        int num4 = int.MinValue;
        int num5 = int.MaxValue;
        int num6 = int.MinValue;

        for (int i = 0; i < camVisIndex; i++)
        {
            int num7 = (int)Mathf.Round(camVisibilities[i].Position.x);
            if (num7 < num)
            {
                num = num7;
            }
            if (num7 > num2)
            {
                num2 = num7;
            }
            int num8 = (int)Mathf.Round(camVisibilities[i].Position.y);
            if (num8 < num3)
            {
                num3 = num8;
            }
            if (num8 > num4)
            {
                num4 = num8;
            }
            int num9 = (int)Mathf.Round(camVisibilities[i].Position.z);
            if (num9 < num5)
            {
                num5 = num9;
            }
            if (num9 > num6)
            {
                num6 = num9;
            }
        }
        num--;
        num2++;
        num3--;
        num4++;
        num5--;
        num6++;
        int num10 = -num;
        int num11 = Mathf.Abs(num2 - num) + 1;
        int num12 = -num3;
        int num13 = Mathf.Abs(num4 - num3) + 1;
        int num14 = -num5;
        int num15 = Mathf.Abs(num6 - num5) + 1;

        List <CameraVisibility>[,,] array = new List <CameraVisibility> [num11, num13, num15];
        for (int i = 0; i < camVisIndex; i++)
        {
            int  num16 = (int)Mathf.Round(camVisibilities[i].Position.x) + num10;
            int  num17 = (int)Mathf.Round(camVisibilities[i].Position.y) + num12;
            int  num18 = (int)Mathf.Round(camVisibilities[i].Position.z) + num14;
            bool flag  = false;
            List <CameraVisibility> list = array[num16, num17, num18];
            if (list == null)
            {
                list = new List <CameraVisibility>();
                array[num16, num17, num18] = list;
            }
            else
            {
                for (int j = 0; j < list.Count; j++)
                {
                    float magnitude = (camVisibilities[i].Position - list[j].Position).magnitude;
                    if (magnitude <= MinDistanceVariance && Vector3.Angle(list[j].Forward, camVisibilities[i].Forward) <= MinAngleVariance)
                    {
                        flag = true;
                        break;
                    }
                }
            }
            if (!flag)
            {
                CameraVisibility item = default(CameraVisibility);
                item.Forward  = camVisibilities[i].Forward;
                item.Up       = camVisibilities[i].Up;
                item.Right    = camVisibilities[i].Right;
                item.Position = camVisibilities[i].Position;
                item.Fov      = CamFov;
                list.Add(item);
            }
        }
        deriveAdditionalVisibilities(array, num10, num12, num14);
        return(getUniqueVisibilities(array));
    }
예제 #12
0
    private void deriveAdditionalVisibilities(List <CameraVisibility>[,,] camVisibilitiesAtPos, int xIndexOffset, int yIndexOffset, int zIndexOffset)
    {
        int length  = camVisibilitiesAtPos.GetLength(0);
        int length2 = camVisibilitiesAtPos.GetLength(1);
        int length3 = camVisibilitiesAtPos.GetLength(2);
        int num     = 0;

        for (int i = 0; i < length; i++)
        {
            for (int j = 0; j < length2; j++)
            {
                for (int k = 0; k < length3; k++)
                {
                    List <CameraVisibility> list = camVisibilitiesAtPos[i, j, k];
                    if (list != null)
                    {
                        continue;
                    }
                    Vector3 a    = default(Vector3);
                    Vector3 a2   = default(Vector3);
                    float   num2 = 0f;
                    int     num3 = -1;
                    int     num4 = 1;
                    for (int l = num3; l <= num4; l++)
                    {
                        int num5 = i + l;
                        if (num5 < 0 || num5 >= length)
                        {
                            continue;
                        }
                        for (int m = num3; m <= num4; m++)
                        {
                            int num6 = j + m;
                            if (num6 < 0 || num6 >= length2)
                            {
                                continue;
                            }
                            for (int n = num3; n <= num4; n++)
                            {
                                int num7 = k + n;
                                if (num7 < 0 || num7 >= length3)
                                {
                                    continue;
                                }
                                List <CameraVisibility> list2 = camVisibilitiesAtPos[num5, num6, num7];
                                if (list2 == null)
                                {
                                    continue;
                                }
                                for (int num8 = 0; num8 < list2.Count; num8++)
                                {
                                    if (!list2[num8].IsDerived)
                                    {
                                        a   += list2[num8].Forward;
                                        a2  += list2[num8].Up;
                                        num2 = ((list2[num8].Fov > num2) ? list2[num8].Fov : num2);
                                    }
                                }
                            }
                        }
                    }
                    if (a.magnitude != 0f)
                    {
                        CameraVisibility item = default(CameraVisibility);
                        item.Forward   = a.normalized;
                        item.Up        = a2.normalized;
                        item.Right     = Vector3.Cross(item.Up, item.Forward).normalized;
                        item.Fov       = num2;
                        item.IsDerived = true;
                        item.Position  = new Vector3(i - xIndexOffset, j - yIndexOffset, k - zIndexOffset);
                        num++;
                        List <CameraVisibility> list3 = new List <CameraVisibility>();
                        list3.Add(item);
                        camVisibilitiesAtPos[i, j, k] = list3;
                    }
                }
            }
        }
    }
예제 #13
0
 public override bool CheckVisibility()
 {
     return(CameraVisibility.IsVisible(GraphicPosition) || CameraVisibility.IsVisible(originPos));
 }