/// <summary> /// Change the material Color of a building /// </summary> /// <param name="_b">The Building to change the Material</param> /// <param name="_c">The Color to change it</param> protected void SetMaterialsColor(ABuilding _b, Color _c) { Material[] mats; if (lastRenderer != null) { //Reset lastRenderer mats = lastRenderer.materials; for (int i = 0; i < mats.Length; i++) { mats[i].color = lastMaterialColors[i]; } lastRenderer.materials = mats; } //Set new Renderer if (_b == null) { return; } lastRenderer = _b.m_ModelMeshRenderer; mats = lastRenderer.materials; if (mats == null) { return; } lastMaterialColors = new Color[mats.Length]; for (int i = 0; i < mats.Length; i++) { lastMaterialColors[i] = mats[i].color; mats[i].color = _c; } lastRenderer.materials = mats; }
private void CreateUnits() { if (Gamers != null && Gamers.Length == 2) { PawnFactory pawnFac = new PawnFactory(); for (int i = 0; i < BoardConsts.INITIAL_PAWNS; i++) { APawn dPawn = pawnFac.Create(ECultures.DALRIONS); dPawn.Position = new Coord(1 + i, 7); Gamers[0].AddPawn(dPawn); APawn rPawn = pawnFac.Create(ECultures.RAHKARS); rPawn.Position = new Coord(BoardConsts.MAX_LIN - 2 - i, BoardConsts.MAX_COL - 8); Gamers[1].AddPawn(rPawn); } CulturalCenterFactory centFac = new CulturalCenterFactory(); ABuilding dCenter = centFac.Create(ECultures.DALRIONS, Boards); ABuilding rCenter = centFac.Create(ECultures.RAHKARS, Boards); Gamers[0].SetCultCenter((CulturalCenter)dCenter); Gamers[1].SetCultCenter((CulturalCenter)rCenter); } else { throw new ArgumentException("Invalid player array!"); } }
/// <summary> /// Check if the HitPos is over an Building/Area /// </summary> /// <param name="b"></param> /// <returns></returns> protected bool CheckAreaCollision(out ABuilding b) { List <Area> SphereSphere = new List <Area>(); b = null; foreach (Area area in BuildingManager.m_AllAreas) { if (MyCollision.SphereSphere(new Vector2(m_hitPos.x, m_hitPos.z), 0.8f, new Vector2(area.m_OP.Position.x, area.m_OP.Position.z), area.m_Radius)) { SphereSphere.Add(area); } } if (SphereSphere.Count == 0) { return(false); } else { int index = -1; float closestDistance = float.MaxValue; for (int i = 0; i < SphereSphere.Count; i++) { float distance = Vector3.SqrMagnitude(SphereSphere[i].m_OP.Position - m_hitPos); if (distance < closestDistance) { closestDistance = distance; index = i; } } b = SphereSphere[index].m_Building; return(true); } }