コード例 #1
0
        public void OnPresentationSystemUpdate()
        {
            var entityMgr = Backend.DstEntityManager;
            var dstEntity = Backend.DstEntity;

            if (targetRoot < 0 || targetRoot >= availableRoots.Length)
            {
                return;
            }

            if (canPredict)
            {
                var matrix = availableRoots[targetRoot].localToWorldMatrix;
                entityMgr.SetOrAddComponentData(dstEntity, new ShooterProjectilePrediction {
                    Transform = new RigidTransform(matrix)
                });
            }
            else if (entityMgr.HasComponent <ShooterProjectilePrediction>(dstEntity))
            {
                entityMgr.RemoveComponent <ShooterProjectilePrediction>(dstEntity);
            }

            if (!TryGetComponent(out IEquipmentRoot equipRoot) && (equipRoot = GetComponentInParent <IEquipmentRoot>()) == null)
            {
                return;
            }

            var previousRoot = m_Root;

            m_Root = equipRoot.GetRoot(availableRoots[targetRoot]);
            if (m_Root != null && m_Root.UnitEquipmentBackend == null)
            {
                m_Root = null;
            }

            ThrowableProjectileComponent throwable;

            if (previousRoot == m_Root || (throwable = m_Root.UnitEquipmentBackend.GetComponentInChildren <ThrowableProjectileComponent>()) == null)
            {
                return;
            }

            EntityVisualDefinition visualDefinition = default;

            if (throwable.assetReference != null)
            {
                visualDefinition = entityMgr.World.GetExistingSystem <EntityVisualManager>()
                                   .Register(throwable.assetReference);

                entityMgr.SetComponentData(dstEntity, new ShooterProjectileVisualTarget {
                    Definition = visualDefinition
                });
            }
        }
コード例 #2
0
        protected override void OnCreate()
        {
            base.OnCreate();

            definitionHashMap = new NativeHashMap <Entity, EntityVisualDefinition>(32, Allocator.Persistent);

            resourceMgr = World.GetExistingSystem <GameResourceManager>();

            visualMgr         = World.GetExistingSystem <EntityVisualManager>();
            defaultDefinition = visualMgr.Register(AddressBuilder.Client()
                                                   .Folder("Models")
                                                   .Folder("InGame")
                                                   .Folder("Projectiles")
                                                   .Folder("Cannon")
                                                   .GetAsset("CannonProjectile"));
        }