//##################################################################################### // 실시간 갱신 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); } } }