#pragma warning restore 0169

        protected override void OnUpdate()
        {
            PlayerSystem.Sync();
            ZakoSystem.Sync();
            var             spawner = ECSBulletManager.GetBulletSpawnDataQueue();
            BulletSpawnData data;

            while (spawner.TryDequeue(out data))
            {
                if (data.type_ == 0)
                {
                    ECSBulletManager.spawnBullet(PostUpdateCommands,
                                                 Time.GetCurrent(),
                                                 ref data.position_,
                                                 ref data.velocity_);
                }
                else
                {
                    ECSBulletManager.spawnEnemyBullet(PostUpdateCommands,
                                                      Time.GetCurrent(),
                                                      ref data.position_,
                                                      ref data.velocity_);
                }
            }
        }
        void OnEnable()
        {
            bullet_spawn_data_queue_ = new NativeQueue <BulletSpawnData>(Allocator.Persistent);

            var entity_manager = World.Active.GetOrCreateManager <EntityManager>();

            arche_type_bullet_ = entity_manager.CreateArchetype(typeof(Destroyable)
                                                                , typeof(Position)
                                                                , typeof(Rotation)
                                                                , typeof(LocalToWorld)
                                                                , typeof(RigidbodyPosition)
                                                                , typeof(SphereCollider)
                                                                , typeof(PlayerBulletCollisionInfo)
                                                                , typeof(AlivePeriod)
                                                                , typeof(MeshRenderBounds)
                                                                , typeof(WorldMeshRenderBounds)
                                                                , typeof(MeshInstanceRenderer)
                                                                );
            arche_type_enemy_bullet_ = entity_manager.CreateArchetype(typeof(Destroyable)
                                                                      , typeof(Position)
                                                                      , typeof(Rotation)
                                                                      , typeof(LocalToWorld)
                                                                      , typeof(RigidbodyPosition)
                                                                      , typeof(SphereCollider)
                                                                      , typeof(EnemyBulletCollisionInfo)
                                                                      , typeof(AlivePeriod)
                                                                      , typeof(MeshRenderBounds)
                                                                      , typeof(WorldMeshRenderBounds)
                                                                      , typeof(MeshInstanceRenderer)
                                                                      );
            material_bullet_ = new Material(material_.shader);
            material_bullet_.enableInstancing = true;
            material_bullet_.mainTexture      = material_.mainTexture;
            material_bullet_.SetColor("_Color", new UnityEngine.Color(0.25f, 1f, 0.5f));
            material_enemy_bullet_ = new Material(material_.shader);
            material_enemy_bullet_.enableInstancing = true;
            material_enemy_bullet_.mainTexture      = material_.mainTexture;
            material_enemy_bullet_.SetColor("_Color", new UnityEngine.Color(1f, 0.5f, 0.25f));
            Vector3[] vertices = new Vector3[4];
            Vector2[] uvs      =
            {
                new Vector2(0, 0),
                new Vector2(1, 0),
                new Vector2(0, 1),
                new Vector2(1, 1),
            };
            int[] triangles =
            {
                0, 1, 2,
                2, 1, 3,
            };
            mesh_           = new Mesh();
            mesh_.vertices  = vertices;
            mesh_.uv        = uvs;
            mesh_.triangles = triangles;
            instance_       = GameObject.Find("bullet_manager").GetComponent <ECSBulletManager>();
        }
            public void Execute(int i)
            {
                var random = random_list_[i];
                var pos    = new float3(0f, 0f, 0f);
                var vel    = random.onSphere(10f);

                ECSBulletManager.spawnBullet(command_buffer_,
                                             time_,
                                             ref pos,
                                             ref vel);
                vel = random.onSphere(10f);
                ECSBulletManager.spawnEnemyBullet(command_buffer_,
                                                  time_,
                                                  ref pos,
                                                  ref vel);
                random_list_[i] = random;
            }
示例#4
0
        protected override JobHandle OnUpdate(JobHandle inputDeps)
        {
            rigidbody_position_system_.Sync();

            handle_ = inputDeps;

            Entity player_entity = SystemManager.Instance.getPrimaryPlayer();
            var    job           = new ZakoJob {
                time_              = Time.GetCurrent(),
                dt_                = Time.GetDT(),
                player_pos_        = position_list_from_entity_[player_entity],
                group_             = group_,
                bullet_spawner_    = ECSBulletManager.GetBulletSpawnDataQueue().ToConcurrent(),
                explosion_spawner_ = ECSExplosionManager.GetExplosionSpawnDataQueue().ToConcurrent(),
            };

            handle_ = job.Schedule(group_.zako_list_.Length, 8, handle_);

            return(handle_);
        }
示例#5
0
        protected override void OnUpdate()
        {
            var time = Time.GetCurrent();

            for (var i = 0; i < group_.random_list_.Length; ++i)
            {
                var random = group_.random_list_[i];
                var pos    = new float3(0f, 0f, 0f);
                var vel    = random.onSphere(10f);
                ECSBulletManager.spawnBullet(PostUpdateCommands,
                                             time,
                                             ref pos,
                                             ref vel);
                vel = random.onSphere(10f);
                ECSBulletManager.spawnEnemyBullet(PostUpdateCommands,
                                                  time,
                                                  ref pos,
                                                  ref vel);
                group_.random_list_[i] = random;
            }
        }
        protected override JobHandle OnUpdate(JobHandle inputDeps)
        {
            CursorSystem.Sync();
            game_camera_update_system_.Sync();

            handle_ = inputDeps;

            if (lockon_limit_.IsCreated)
            {
                lockon_limit_.Dispose();
            }
            // for (var i = 0; i < player_group_.Length; ++i) {
            int i = 0;          // only one player now.
            {
                var entity          = player_group_.entity_list_[i];
                var player          = player_group_.player_list_[i];
                var player_position = player_group_.position_list_[i];
                var player_rotation = player_group_.rotation_list_[i];

                // Debug.Log(player.life_.get());

                var pc = player_controller_list_from_entity_[entity];
                if (pc.lockon_ != 0)
                {
                    lockon_limit_ = new NativeLimitedCounter(Allocator.TempJob);

                    var sumup_job = new SumupJob {
                        time_            = Time.GetCurrent(),
                        locktarget_list_ = lockon_group_.locktarget_list_,
                        lockon_limit_    = lockon_limit_,
                    };
                    handle_ = sumup_job.Schedule(lockon_group_.Length, 8, handle_);

                    var lockon_job = new LockonJob {
                        time_ = Time.GetCurrent(),
                        locktarget_entity_list_         = lockon_group_.entity_list_,
                        locktarget_list_                = lockon_group_.locktarget_list_,
                        locktarget_local_to_world_list_ = lockon_group_.local_to_world_list_,
                        player_position_                = player_position,
                        player_normal_ = math.mul(player_rotation.Value, new float3(0f, 0f, 1f)),
                        lockon_limit_  = lockon_limit_,
                        sight_spawner_ = ECSSightManager.GetSightSpawnDataQueue(),
                    };
                    handle_ = lockon_job.Schedule(lockon_group_.Length, 8, handle_);
                }

                if (pc.fire_laser_ != 0)
                {
                    var fire_laser_job = new FireLaserJob {
                        time_            = Time.GetCurrent(),
                        command_buffer_  = barrier_.CreateCommandBuffer(),
                        entity_list_     = lockon_group_.entity_list_,
                        player_position_ = player_position,
                        player_rotation_ = player_rotation,
                        player_          = player,
                        locktarget_list_ = lockon_group_.locktarget_list_,
                        random_list_     = lockon_group_.random_list_,
                    };
                    handle_ = fire_laser_job.Schedule(lockon_group_.Length, 8, handle_);
                }

                if (pc.fire_bullet_ != 0)
                {
                    player.fire_bullet_time_  = Time.GetCurrent();
                    player.fire_bullet_count_ = 0;
                }
                const int RENSYA_NUM = 16;
                if (Time.GetCurrent() - player.fire_bullet_time_ >= 0f && player.fire_bullet_count_ < RENSYA_NUM)
                {
                    var vel  = math.mul(player_rotation.Value, new float3(0f, 0f, 48f));
                    var pos0 = math.mul(player_rotation.Value, new float3(0.3f, 0.1f, 0.8f)) + player_position.Value;
                    ECSBulletManager.spawnBullet(barrier_.CreateCommandBuffer(),
                                                 Time.GetCurrent(),
                                                 ref pos0,
                                                 ref vel);
                    var pos1 = math.mul(player_rotation.Value, new float3(-0.3f, 0.1f, 0.8f)) + player_position.Value;
                    ECSBulletManager.spawnBullet(barrier_.CreateCommandBuffer(),
                                                 Time.GetCurrent(),
                                                 ref pos1,
                                                 ref vel);
                    const float INTERVAL = 0.05f;
                    player.fire_bullet_time_ = Time.GetCurrent() + INTERVAL;
                    ++player.fire_bullet_count_;
                }
                player_group_.player_list_[i] = player;
            }

            var job = new PlayerJob {
                dt_                        = Time.GetDT(),
                position_list_             = player_group_.position_list_,
                rotation_list_             = player_group_.rotation_list_,
                rb_position_list_          = player_group_.rb_position_list_,
                player_list_               = player_group_.player_list_,
                player_controller_list_    = player_group_.player_controller_list_,
                position_list_from_entity_ = position_list_from_entity_,
            };

            handle_ = job.Schedule(player_group_.Length, 8, handle_);

            return(handle_);
        }