private void TurretQuery(Entity entity, ref VirtualArmy.Component army, ref TurretHub.Component turret, ref BaseUnitStatus.Component status) { if (status.State != UnitState.Alive) { return; } var trans = EntityManager.GetComponentObject <Transform>(entity); var pos = trans.position; var unit = getNearestPlayer(pos, HexDictionary.HexEdgeLength, selfId: null); if (unit == null) { if (army.IsActive == false) { VirtualizeTurrests(ref army, turret.TurretsDatas); } } else { if (army.IsActive) { RealizeTurrets(ref army, turret.TurretsDatas); } else { AlarmTurrets(ref army, turret.TurretsDatas); } } }
private void Query(Transform trans, ref TurretHub.Component turret, ref BaseUnitStatus.Component status, ref HexFacility.Component hex, ref SpatialEntityId entityId) { if (status.State != UnitState.Alive) { return; } if (UnitUtils.IsBuilding(status.Type) == false) { return; } var datas = turret.TurretsDatas; if (IsNeedRenewTurrets(datas) == false) { return; } var units = getAllUnits(trans.position, HexDictionary.HexEdgeLength, allowDead: true, GetSingleUnitTypes(UnitType.Turret)); removeKeys.Clear(); foreach (var k in datas.Keys) { removeKeys.Add(k); } bool changed = false; var hexIndex = hex.HexIndex; foreach (var u in units) { if (hexIndex != uint.MaxValue && HexUtils.IsInsideHex(this.Origin, hexIndex, u.pos, HexDictionary.HexEdgeLength) == false) { continue; } if (TryGetComponent <TurretComponent.Component>(u.id, out var comp) == false) { continue; } int masterId = comp.Value.MasterId; if (datas.ContainsKey(u.id)) { var val = datas[u.id]; if (CheckDiffTurretInfo(ref val, u.side, masterId, u.id)) { datas[u.id] = val; changed = true; } removeKeys.Remove(u.id); } else { datas[u.id] = new TurretInfo(u.side, masterId, u.id); changed = true; } } if (removeKeys.Count == 0 && changed == false) { return; } foreach (var k in removeKeys) { datas.Remove(k); } turret.TurretsDatas = datas; }