Ejemplo n.º 1
0
        //#####################################################################################
        // 실시간 갱신

        public void Update()
        {
            m_updateLimiter.Set(0, GameValues.MinRunFactoryDelay);
            if (m_updateLimiter.Tick(0))
            {
                var factories = this.GameBoard.Factories;

                int endIndex = m_beginUpdateFactoryIndex + 2;
                if (endIndex > factories.Count)
                {
                    endIndex = factories.Count;
                }

                for (int i = m_beginUpdateFactoryIndex; i < endIndex; ++i)
                {
                    ++m_beginUpdateFactoryIndex;


                    Point factoryPos  = factories[i];
                    Tile  factoryTile = this.GameBoard.Board.GetItemAt(factoryPos.X, factoryPos.Y);

                    // 타일이 존재하고
                    // 공장 타일이며
                    // 주인이 있고
                    // 충분한 힘이 있으면
                    if (factoryTile != null &&
                        factoryTile.IsFactoryTile &&
                        factoryTile.HaveOwner &&
                        factoryTile.Power > GameValues.FactoryConversionAmount)
                    {
                        // 생산 활동을 통해서 땅의 힘을 소모하고 주인의 자원 증가

                        var user = this.UserDirector.GetAccount(factoryTile.Owner);

                        factoryTile.Power -= GameValues.FactoryConversionAmount;
                        user.Resource     += GameValues.FactoryConversionAmount;


                        // 변경사항 알림
                        this.NtfSetPower(factoryPos.X, factoryPos.Y, factoryTile.Power);
                    }
                }


                if (m_beginUpdateFactoryIndex >= factories.Count)
                {
                    m_beginUpdateFactoryIndex = 0;


                    m_updateLimiter.Update(0);
                }
            }


            m_updateLimiter.Set(1, GameValues.MinRunChipDelay);
            if (m_updateLimiter.Tick(1))
            {
                var chips = this.CompanyDirector.Chips;

                int endIndex = m_beginUpdateChipIndex + 8;
                if (endIndex > chips.Count)
                {
                    endIndex = chips.Count;
                }

                for (int i = m_beginUpdateChipIndex; i < endIndex; ++i)
                {
                    ++m_beginUpdateChipIndex;


                    Chip  chip     = chips[i];
                    Point chipPos  = this.CompanyDirector.GetChipLocation(chip);
                    Tile  chipTile = this.GameBoard.Board.GetItemAt(chipPos.X, chipPos.Y);

                    // 타일이 존재하고
                    // 칩 타일이면
                    if (chipTile != null &&
                        chipTile.IsChipTile)
                    {
                        // 칩 작동
                        chip.ExcuteNext(this, this.UserDirector, chipTile, chipPos);
                    }
                }


                if (m_beginUpdateChipIndex >= chips.Count)
                {
                    m_beginUpdateChipIndex = 0;


                    m_updateLimiter.Update(1);
                }
            }
        }