Example #1
0
        private FlockAgent CreateNewAgent(bool randomZ)
        {
            if (!randomZ)
            {
                //Debug.Log("添加星空块。");
            }


            // 获取数据
            //FlockData data = _daoService.GetFlockData(_dataType,_manager);\

            FlockData data = _daoService.GetFlockDataByScene(_dataType, _manager.SceneIndex);

            // 获取出生位置
            Vector2 randomPosition = UnityEngine.Random.insideUnitSphere;

            Vector3 position = new Vector3();

            position.x = (randomPosition.x / 2 + 0.5f) * _manager.GetScreenRect().x;
            position.y = (randomPosition.y / 2 + 0.5f) * _manager.GetScreenRect().y;


            // 获取长宽
            Sprite logoSprite = data.GetCoverSprite();
            float  width      = _sceneUtil.ResetTexture(new Vector2(logoSprite.rect.width, logoSprite.rect.height)).x;
            float  height     = _sceneUtil.ResetTexture(new Vector2(logoSprite.rect.width, logoSprite.rect.height)).y;

            //FlockAgent go = _itemFactory.Generate(position.x, position.y, position.x, position.y, 0, 0,
            // width, height, data, AgentContainerType.StarContainer);
            FlockAgent go = FlockAgentFactoryInstance.Generate(_manager, position, AgentContainerType.StarContainer,
                                                               position.x, position.y, 0, 0, width, height, data, _sceneConfig.daoTypeEnum);

            go.UpdateImageAlpha(0);

            // 星空效果不会被物理特效影响
            //go.CanEffected = false;
            go.flockStatus  = FlockStatusEnum.STAR;
            go.isStarEffect = true;

            // 设置Z轴

            float z;

            if (randomZ)
            {
                z = Mathf.Lerp(_manager.cutEffectConfig.StarEffectOriginPoint, _manager.cutEffectConfig.StarEffectEndPoint,
                               UnityEngine.Random.Range(0f, 1f));
            }
            else
            {
                z = _manager.cutEffectConfig.StarEffectOriginPoint;
            }

            go.GetComponent <RectTransform>().anchoredPosition3D = go.GetComponent <RectTransform>().anchoredPosition3D + new Vector3(0, 0, z);
            go.Z    = z;
            go.name = "Agent-" + Mathf.RoundToInt(go.Z);

            _activeAgents.Add(go);

            return(go);
        }
Example #2
0
        /// <summary>
        ///     创建的代理
        /// </summary>
        private void CreateItem(DataTypeEnum type)
        {
            //  初始化 config
            _displayBehaviorConfig = new DisplayBehaviorConfig();
            _sceneUtil             = new SceneUtils(_manager, _sceneConfig.isKinect);

            _row = _manager.cutEffectConfig.FrontBackRow;
            int   itemHeight = _sceneUtil.GetFixedItemHeight();
            float gap        = _sceneUtil.GetGap();

            float w = _manager.mainPanel.rect.width; // 获取总宽度

            int column     = 0;                      //  列数
            int generate_x = 0;                      // 生成新 agent 的位置

            // 按列创建, 隔行创建
            while (generate_x < w)
            {
                // 获取列数奇数状态
                bool isOddColumn = column % 2 == 0;

                float generate_x_temp = 0;

                for (int i = 0; i < _row; i++)
                {
                    //  获取行数奇数状态
                    bool isOddRow = i % 2 == 0;

                    //  获取要创建的内容
                    FlockData agent       = _manager.daoServiceFactory.GetDaoService(_sceneConfig.daoTypeEnum).GetFlockDataByScene(type, _manager.SceneIndex);
                    Sprite    coverSprite = agent.GetCoverSprite();
                    float     imageWidth  = coverSprite.rect.width;
                    float     imageHeight = coverSprite.rect.height;

                    // 得到调整后的长宽
                    Vector2 imageSize = _sceneUtil.ResetTexture(new Vector2(imageWidth, imageHeight));

                    imageSize.x = (imageSize.x * 1.5f);
                    imageSize.y = (imageSize.y * 1.5f);

                    //Vector2 imageSize = AppUtils.ResetTexture(new Vector2(imageWidth, imageHeight),
                    //    _manager.displayFactor);

                    FlockAgent go;
                    float      ori_y = _sceneUtil.GetYPositionByFixedHeight(itemHeight, i);

                    float ori_x = generate_x + gap + imageSize.x / 2;

                    if (ori_x + gap + imageSize.x / 2 > generate_x_temp)
                    {
                        generate_x_temp = ori_x + gap + imageSize.x / 2;
                    }

                    // 定义生成位置
                    float gen_x, gen_y;
                    gen_x = _manager.mainPanel.rect.width + imageSize.x + gap;
                    gen_y = ori_y;


                    if ((isOddColumn && isOddRow) || (!isOddRow && !isOddColumn))
                    {
                        // 创建前排
                        //go = ItemsFactory.Generate(gen_x, gen_y, ori_x, ori_y, i, column,
                        //    imageSize.x, imageSize.y, agent, AgentContainerType.MainPanel);

                        go = FlockAgentFactoryInstance.Generate(_manager, new Vector2(gen_x, gen_y), AgentContainerType.MainPanel
                                                                , ori_x, ori_y, i, column, imageSize.x, imageSize.y, agent, _sceneConfig.daoTypeEnum);
                    }
                    else
                    {
                        //  创建后排
                        float width  = imageSize.x * 0.6f;
                        float height = imageSize.y * 0.6f;

                        //go = ItemsFactory.Generate(gen_x, gen_y, ori_x, ori_y, i, column,
                        //    imageSize.x, imageSize.y, agent, AgentContainerType.BackPanel);

                        //go = ItemsFactory.Generate(gen_x, gen_y, ori_x, ori_y, i, column,
                        //    width, height, agent, AgentContainerType.BackPanel);


                        go = FlockAgentFactoryInstance.Generate(_manager, new Vector2(gen_x, gen_y), AgentContainerType.BackPanel
                                                                , ori_x, ori_y, i, column, width, height, agent, _sceneConfig.daoTypeEnum);
                    }
                    //go.NextVector2 = new Vector2(gen_x, gen_y);

                    go.flockStatus = FlockStatusEnum.RUNIN;

                    // 装载延迟参数
                    go.DelayX = 0;
                    go.DelayY = 0;
                }

                // 更新 generate_x 的值
                generate_x = Mathf.RoundToInt(generate_x_temp);

                // 第二列的开始在第一列的最右侧
                column++;
            }

            _displayBehaviorConfig.generatePositionX       = generate_x;
            _displayBehaviorConfig.generatePositionXInBack = generate_x;
            _displayBehaviorConfig.Column       = column;
            _displayBehaviorConfig.ColumnInBack = column;

            // 调整启动动画的时间
            _entranceDisplayTime += _startDelayTime;

            // 创建结束
            _displayBehaviorConfig.dataType    = _dataTypeEnum;
            _displayBehaviorConfig.Manager     = _manager;
            _displayBehaviorConfig.sceneUtils  = _sceneUtil;
            _displayBehaviorConfig.sceneConfig = _sceneConfig;

            _onCreateAgentCompleted.Invoke(_displayBehaviorConfig);
        }