Пример #1
0
        //public int ActiveCount
        //{
        //    get
        //    {
        //        int cnt = 0;
        //        for (int i = 0; i < groupList.Length; i++)
        //            if (groupList[i].active == 1)
        //                cnt++;
        //        return cnt;
        //    }
        //}

        //=========================================================================================
        /// <summary>
        /// 拘束の解決
        /// </summary>
        /// <param name="dtime"></param>
        /// <param name="jobHandle"></param>
        /// <returns></returns>
        public override JobHandle SolverConstraint(float dtime, float updatePower, int iteration, JobHandle jobHandle)
        {
            //if (ActiveCount == 0)
            if (groupList.Count == 0)
            {
                return(jobHandle);
            }

            // スプリング拘束(パーティクルごとに実行する)
            var job1 = new SpringJob()
            {
                updatePower = updatePower,

                groupList = groupList.ToJobArray(),

                teamDataList = Manager.Team.teamDataList.ToJobArray(),
                teamIdList   = Manager.Particle.teamIdList.ToJobArray(),

                flagList    = Manager.Particle.flagList.ToJobArray(),
                basePosList = Manager.Particle.basePosList.ToJobArray(),

                nextPosList = Manager.Particle.InNextPosList.ToJobArray()
            };

            jobHandle = job1.Schedule(Manager.Particle.Length, 64, jobHandle);

            return(jobHandle);
        }
Пример #2
0
        //=========================================================================================
        public override JobHandle PostUpdate(JobHandle jobHandle)
        {
            if (springMap.Count == 0)
            {
                return(jobHandle);
            }

            var job = new SpringJob()
            {
                springVertexList = springVertexList.ToJobArray(),
                springMap        = springMap.Map,

                flagList            = Manager.Particle.flagList.ToJobArray(),
                particlePosList     = Manager.Particle.posList.ToJobArray(),
                particleRotList     = Manager.Particle.rotList.ToJobArray(),
                particleBasePosList = Manager.Particle.basePosList.ToJobArray(),
                particleBaseRotList = Manager.Particle.baseRotList.ToJobArray(),

                virtualPosList        = Manager.Mesh.virtualPosList.ToJobArray(),
                virtualVertexFlagList = Manager.Mesh.virtualVertexFlagList.ToJobArray(),
            };

            jobHandle = job.Schedule(springVertexList.Length, 64, jobHandle);

            return(jobHandle);
        }
Пример #3
0
        protected override JobHandle OnUpdate(JobHandle inputDeps)
        {
            /*
             * if (!HasSingleton<PlayerInput>())
             *  return inputDeps;
             *
             * var emitDustJob = new EmitDust
             * {
             *  deltaTime = Time.deltaTime,
             *  CommandBuffer = endSimulationEntityCommandBufferSystem.CreateCommandBuffer().ToConcurrent(),
             *  PlayerInput = GetSingleton<PlayerInput>(),
             *  random = (uint)Random.Range(0,12345)
             * };
             * var emitDustHandle = emitDustJob.Schedule(this, inputDeps);
             * endSimulationEntityCommandBufferSystem.AddJobHandleForProducer(emitDustHandle);
             *
             * var eyeJob = new AlignEyes
             * {
             *  LocalToWorldDataFromEntity = GetComponentDataFromEntity<LocalToWorld>(),
             * };
             * var eyeHandle = eyeJob.Schedule(this, emitDustHandle);
             */
            var springRotationJob = new SpringJob
            {
                deltaTime = Time.deltaTime,
                time      = Time.time,
                Spring    = GetComponentDataFromEntity <Spring>(),
                Agent     = GetComponentDataFromEntity <Agent>(true)
            };
            var springRotationJobHandle = springRotationJob.Schedule(this, inputDeps);

            var scaleBodyJob = new ScaleBodyJob
            {
                deltaTime = Time.deltaTime,
                time      = Time.time
            };

            return(scaleBodyJob.Schedule(this, springRotationJobHandle));
        }