Exemplo n.º 1
0
        public static void UpdateOrbiter(EntityManager EntityManager, Entity panelUI, float3 orbitPosition, float orbitLerpSpeed)
        {
            CameraLink  cameraLink = EntityManager.GetComponentData <CameraLink>(panelUI);
            OrbitCamera orbitor    = new OrbitCamera
            {
                orbitPosition = orbitPosition,
                lerpSpeed     = orbitLerpSpeed
            };
            var   frustumHeight = 2.0f * orbitor.orbitPosition.z * math.tan(math.radians(cameraLink.fov) * 0.5f);
            var   frustumWidth  = frustumHeight * cameraLink.aspectRatio;
            float positionX     = orbitor.orbitPosition.x * frustumWidth;
            float positionY     = -orbitor.orbitPosition.y * frustumHeight;

            orbitor.position = new float3(positionX, positionY, orbitor.orbitPosition.z);
            EntityManager.SetComponentData(panelUI, orbitor);
            if (EntityManager.Exists(cameraLink.camera))
            {
                float3     cameraPosition = EntityManager.GetComponentData <Translation>(cameraLink.camera).Value;
                quaternion cameraRotation = EntityManager.GetComponentData <Rotation>(cameraLink.camera).Value;
                EntityManager.SetComponentData(panelUI, new Translation {
                    Value = orbitor.GetTranslatedPosition(cameraPosition, cameraRotation)
                });
            }
        }