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);
                }
            }
        }
Exemple #2
0
        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;
        }