コード例 #1
0
        private void TeamQuery(Entity entity,
                               ref CommanderSight.Component sight,
                               ref CommanderTeam.Component team,
                               ref BaseUnitStatus.Component status,
                               ref SpatialEntityId entityId)
        {
            if (status.State != UnitState.Alive)
            {
                return;
            }

            if (UnitUtils.IsOfficer(status.Type) == false)
            {
                return;
            }

            if (status.Order == OrderType.Idle)
            {
                return;
            }

            if (status.Rank == 0)
            {
                return;
            }

            var trans = EntityManager.GetComponentObject <Transform>(entity);
            var pos   = trans.position;

            team.FollowerInfo.UnderCommanders.Clear();

            var rank   = status.Rank - 1;
            var range  = RangeDictionary.GetBoidsRange(status.Rank);
            var allies = getAllyUnits(status.Side, pos, range, allowDead: false, GetSingleUnitTypes(UnitType.Commander));

            foreach (var unit in allies)
            {
                if (unit.id == entityId.EntityId)
                {
                    continue;
                }

                BaseUnitStatus.Component?sts;
                if (this.TryGetComponent(unit.id, out sts) == false)
                {
                    continue;
                }

                if (sts.Value.Rank != rank)
                {
                    continue;
                }

                team.FollowerInfo.UnderCommanders.Add(unit.id);
            }
        }
コード例 #2
0
        protected override void OnUpdate()
        {
            if (CheckTime(ref inter) == false)
            {
                return;
            }

            Entities.With(group).ForEach((Entity entity,
                                          ref CommanderAction.Component action,
                                          ref CommanderTeam.Component team,
                                          ref BaseUnitStatus.Component status,
                                          ref BaseUnitTarget.Component tgt,
                                          ref SpatialEntityId entityId) =>
            {
                if (status.State != UnitState.Alive)
                {
                    return;
                }

                if (UnitUtils.IsOfficer(status.Type) == false)
                {
                    return;
                }

                if (!action.IsTarget)
                {
                    return;
                }

                //var trans = EntityManager.GetComponentObject<Transform>(entity);
                //ApplyOrder(trans.position, status.Side, status.Order, status.Rank, tgt);

                //switch (status.Order)
                //{
                //    case OrderType.Escape:
                //        ProductAlly(trans.position, status.Side, commander, team, entityId, tgt, ref action);
                //        break;
                //
                //    case OrderType.Organize:
                //        //
                //        break;
                //
                //    default:
                //        action.ActionType = CommandActionType.None;
                //        break;
                //}
            });
        }