Ejemplo n.º 1
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.Map);

            _myMapFragment = MapFragment.NewInstance();

            FragmentTransaction tx = FragmentManager.BeginTransaction();

            tx.Add(Resource.Id.MapContentFrame, _myMapFragment);
            tx.Commit();

            _installations = new Dictionary <string, Installation>();

            _mapMarkerFactory = new MapMarkerFactory(Resources);
            _presenter        = new MapPresenter(this, ModelFactory.Instance.CreateMapModel());

            _myMapFragment.GetMapAsync(this);

            ActionBar.SetDisplayHomeAsUpEnabled(true);
            ActionBar.SetHomeButtonEnabled(true);
        }
Ejemplo n.º 2
0
        public void Update(MemoryContext ctx)
        {
            if (ctx == null)
            {
                throw new ArgumentNullException(nameof(ctx));
            }

            try
            {
                if (!IsLocalActorValid(ctx))
                {
                    return;
                }

                if (!IsObjectManagerOnNewFrame(ctx))
                {
                    return;
                }

                var itemsToAdd    = new List <IMapMarker>();
                var itemsToRemove = new List <IMapMarker>();

                _acdsObserver = _acdsObserver ?? new ContainerObserver <ACD>(ctx.DataSegment.ObjectManager.ACDManager.ActorCommonData);
                _acdsObserver.Update();

                // Must have a local ACD to base coords on.
                if (_playerAcd == null)
                {
                    var playerAcdId = ctx.DataSegment.ObjectManager.PlayerDataManager[
                        ctx.DataSegment.ObjectManager.Player.LocalPlayerIndex].ACDID;

                    var index = Array.IndexOf(_acdsObserver.CurrentMapping, playerAcdId);
                    if (index != -1)
                    {
                        _playerAcd = MemoryObjectFactory.UnsafeCreate <ACD>(new BufferMemoryReader(_acdsObserver.CurrentData), index * _acdsObserver.Container.ItemSize);
                    }
                }

                foreach (var acd in _acdsObserver.OldItems)
                {
                    var marker = default(IMapMarker);
                    if (_minimapItemsDic.TryGetValue(acd.Address, out marker))
                    {
                        Trace.WriteLine("Removing " + acd.Name);
                        itemsToRemove.Add(marker);
                        _minimapItemsDic.Remove(acd.Address);
                    }
                }

                foreach (var acd in _acdsObserver.NewItems)
                {
                    var actorSnoId = acd.ActorSNO;
                    if (_ignoredSnoIds.Contains(actorSnoId))
                    {
                        continue;
                    }

                    if (!_minimapItemsDic.ContainsKey(acd.Address))
                    {
                        bool ignore;
                        var  minimapItem = MapMarkerFactory.Create(acd, out ignore);
                        if (ignore)
                        {
                            _ignoredSnoIds.Add(actorSnoId);
                        }
                        else if (minimapItem != null)
                        {
                            _minimapItemsDic.Add(acd.Address, minimapItem);
                            itemsToAdd.Add(minimapItem);
                        }
                    }
                }

                UpdateUI(itemsToAdd, itemsToRemove);
            }
            catch (Exception exception)
            {
                OnUpdateException(exception);
            }
        }
Ejemplo n.º 3
0
        public void Update(Engine engine)
        {
            try
            {
                if (!IsLocalActorValid(engine))
                {
                    return;
                }

                if (!IsObjectManagerOnNewFrame(engine))
                {
                    return;
                }

                var itemsToAdd = new List <IMapMarker>();

                var acds = ActorCommonData.Container;
                if (acds == null)
                {
                    Trace.TraceError("ACDs == null");
                }
                else
                {
                    var bufferSizePreDump = _acdsBuffer.Length;

                    acds.TakeSnapshot();
                    var dump = acds.GetBufferDump(ref _acdsBuffer);

                    var bufferSizePostDump = _acdsBuffer.Length;
                    if (bufferSizePostDump < bufferSizePreDump)
                    {
                        _minimapItems.Clear();
                        _minimapItemsDic.Clear();
                        _playerAcd = null;
                        return;
                    }

                    // Must have a local ACD to base coords on.
                    if (_playerAcd == null)
                    {
                        var playerAcdId = ActorCommonDataHelper.GetLocalAcd().x000_Id;

                        foreach (var item in dump)
                        {
                            var acdId = BitConverter.ToInt32(_acdsBuffer, item.BufferOffset + 0x00);
                            if (acdId == playerAcdId)
                            {
                                _playerAcd = item.Create();
                            }
                        }

                        if (_playerAcd == null)
                        {
                            return;
                        }
                    }

                    var firstFreeAcd = acds.x114_Free;
                    if (firstFreeAcd != _firstFreeAcd)
                    {
                        foreach (var item in dump)
                        {
                            if (_minimapItemsDic.ContainsKey(item.Address))
                            {
                                continue;
                            }
                            var acd = item.Create();

                            int acdId = acd.x000_Id;
                            if (acdId == -1)
                            {
                                continue;
                            }

                            var actorSnoId = acd.x090_ActorSnoId;
                            if (_ignoredSnoIds.Contains(actorSnoId))
                            {
                                continue;
                            }

                            if (!_minimapItemsDic.ContainsKey(acd.Address))
                            {
                                bool ignore;
                                var  minimapItem = MapMarkerFactory.Create(acd, out ignore);
                                if (ignore)
                                {
                                    _ignoredSnoIds.Add(actorSnoId);
                                }
                                else if (minimapItem != null)
                                {
                                    _minimapItemsDic.Add(acd.Address, minimapItem);
                                    itemsToAdd.Add(minimapItem);
                                }
                            }
                        }
                    }

                    _firstFreeAcd = firstFreeAcd;
                    acds.FreeSnapshot();
                }

                UpdateUI(itemsToAdd);
            }
            catch (Exception exception)
            {
                OnUpdateException(exception);
            }
        }