コード例 #1
0
        private void movePlanetXY(MessageTick tick)
        {
            PointD pt = OrbitalUtils.CalcPositionFromTick(tick.Tick, _orbitHours, _scPlanet.OrbitKm);

            _model.PositionX = pt.X;
            _model.PositionY = pt.Y;
        }
コード例 #2
0
 private void updateShips(MessageTick tick)
 {
     foreach (ShipController sc in _shipValues)
     {
         sc.Tick(tick);
     }
 }
コード例 #3
0
        static void AddToSymbolCache(MessageTick tick)
        {
            Dictionary <string, MessageTick> dict = null;

            if (tick.TickType == Platform.Tick.Common.Enums.EnTickType.BID)
            {
                dict = symbolsCacheBid;
            }
            else
            {
                dict = symbolsCacheAsc;
            }
            if (dict.ContainsKey(tick.Symbol))
            {
                MessageTick tmp = dict[tick.Symbol];
                if (tmp.DateTime < tick.DateTime)
                {
                    dict[tick.Symbol] = tick;
                }
            }
            else
            {
                dict.Add(tick.Symbol, tick);
                //symbolsCache.Add(tick.Symbol, tick, (key, oldValue) => tick);
            }
        }
コード例 #4
0
        private void receiveEngineRunCommand(MessageEngineRunCommand msg)
        {
            MessageTick pulse = new MessageTick(0);

            if (msg.RunCommand == EngineRunCommand.RunMax && _runState != TickEngineRunState.RunningMax)
            {
                cancelPulse();
                _numberOfIncompleteSS = _subscribedActorSolarSystems.Count();
                _runState             = TickEngineRunState.RunningMax;
                startTicksTimer();
                receiveTick(pulse);
            }
            else if (msg.RunCommand == EngineRunCommand.RunPulse && _runState != TickEngineRunState.Running)
            {
                _runState  = TickEngineRunState.Running;
                _runCancel = Context.System.Scheduler.ScheduleTellRepeatedlyCancelable(0, 5, Self, pulse, ActorRefs.Nobody);
                startTicksTimer();
                receiveTick(pulse);
            }
            else if (msg.RunCommand == EngineRunCommand.Stop && _runState != TickEngineRunState.Stopped)
            {
                _runState = TickEngineRunState.Stopped;
                cancelPulse();
                _secondTimer.Stop();
            }
        }
コード例 #5
0
        private void producingTick(MessageTick tick)
        {
            if (_model.TickForNextProduction <= tick.Tick)
            {
                if (_model.Owner != null)
                {
                    MessageProducedResources mpr = new MessageProducedResources(_bp.Produces, _model.Owner);
                    _planetC.ReceiveProducedResource(mpr);
                    _model.Producing = false;

                    //foreach (ResourceQuantity resQ in _bp.Produces)
                    //{
                    //    _actorTextOutput.Tell(_model.Name + " PRODUCES " + resQ.Quantity + " " + resQ.Type.ToString() + " " + tick.Tick.ToString());
                    //}
                }

                if (_model.AutoResumeProduction)
                {
                    requestResources(tick);
                }
                else
                {
                    _model.Producing = false;
                }
            }
        }
コード例 #6
0
 private void updatePlanets(MessageTick tick)
 {
     foreach (PlanetController pc in _planetValues)
     {
         pc.Tick(tick);
     }
 }
コード例 #7
0
 private void updateProducers(MessageTick tick)
 {
     foreach (ProducerController pc in _producerCs)
     {
         pc.Tick(tick);
     }
 }
コード例 #8
0
        private void receiveTick(MessageTick pulse)
        {
            _state.CurrentTick++;
            MessageTick tick = new MessageTick(_state.CurrentTick);

            foreach (IActorRef ssActor in _subscribedActorSolarSystems)
            {
                ssActor.Tell(tick);
            }
        }
コード例 #9
0
        //private object pilotingCruisingShip(MessageTick tick)
        //{
        //    // new destination
        //    if (_state.CurrentShipDestinationScId != _memory.CurrentDestinationScId)
        //    {
        //        IMessageShipCommandData msd = new MessageShipBasic(ShipCommandEnum.SetDestination, _memory.CurrentDestinationScId);
        //        MessageShipCommand msc = new MessageShipCommand(msd, tick.Tick, _state.CurrentShipId);
        //        //ScPlanet curDest = StarChart.GetPlanet(_memory.CurrentDestinationScId);
        //        //_actorTextOutput.Tell("Agent Piloting Ship towards " + curDest.Name);
        //        return msc;
        //    }

        //    // Am I at my current destination
        //    if (_state.CurrentShipAtDestination)
        //    {
        //        // request docking
        //        MessageShipCommand msc = new MessageShipCommand(new MessageShipBasic(ShipCommandEnum.Dock,_), tick.Tick, _state.CurrentShipId);
        //        return msc;
        //    }

        //    return null;
        //}


        //private object pilotingDockedShip(MessageTick tick)
        //{
        //    object msg = null;

        //    checkMarkets(tick);
        //    if (checkLeaveShip(tick))
        //    {
        //        msg = requestPlanetside(tick);
        //    }
        //    else if (checkUndock(tick))
        //    {
        //        msg = requestUndock(tick);
        //    }

        //    return msg;
        //}

        // scan the local and system markets and decide if there is an order we want to place / fulfil
        private void checkMarkets(MessageTick tick)
        {
            // do i need to place a place / fulfil a market order, if so leave ship to interact with market
            Int64 curPlanet = _state.CurrentShipDockedPlanetScId;

            if (checkOverMinimumTimeForMarketCheck(curPlanet, tick.Tick))
            {
                checkMarketPlaceOrder(tick);
            }
        }
コード例 #10
0
ファイル: ShipController.cs プロジェクト: AshRolls/GalaxyGen
 public void Tick(MessageTick tick)
 {
     if (_model.ShipState == ShipStateEnum.SpaceAutopilot)
     {
         // move ship towards destination
         PointD newPoint = NavigationUtils.GetNewPointForShip(_model.Type.MaxCruisingSpeedKmH, _model.PositionX, _model.PositionY, _destination.PositionX, _destination.PositionY);
         _model.PositionX = newPoint.X;
         _model.PositionY = newPoint.Y;
     }
 }
コード例 #11
0
 public void Tick(MessageTick tick)
 {
     if (_model.Producing)
     {
         producingTick(tick);
     }
     else if (_model.AutoResumeProduction || _model.ProduceNThenStop > 0)
     {
         requestResources(tick);
     }
 }
コード例 #12
0
        private void checkMarketPlaceOrder(MessageTick tick)
        {
            // TODO check stock and decide what we need (everywhere) and don't need (at this location)


            // get prices at current location for needs
            // buy TODO buy any with reasonable price

            // get prices at current location for dont needs
            // sell TODO sell any at reasonable price
        }
コード例 #13
0
 private void receiveTick(MessageTick tick)
 {
     _curTick = tick.Tick;
     _solarSystemC.Tick(tick);
     foreach (IActorRef agentActor in _actorAgentValues)
     {
         agentActor.Tell(tick);
     }
     if (!_subscribedActorAgents.Any())
     {
         sendSSCompletedMessage();
     }
 }
コード例 #14
0
        private void requestResources(MessageTick tick)
        {
            MessageRequestResources msg = new MessageRequestResources(_bp.Consumes, _model.Owner, tick.Tick);

            if (_planetC.ReceiveResourceRequest(msg))
            {
                _model.TickForNextProduction = msg.TickSent + _bp.BaseTicks;
                _model.Producing             = true;
                _model.ProduceNThenStop--;
            }
            else
            {
                _model.Producing = false;
            }
        }
コード例 #15
0
        static void Execute(Object listTicks, Object t)
        {
            if (listTicks is BlockingCollection <MessageTick> )
            {
                ITicksContainer containerTicks = new TicksDataTableContainer();

                DateTime lastSave = DateTime.Now;
                BlockingCollection <MessageTick> list = (BlockingCollection <MessageTick>)listTicks;
                SaveTicks thread = (SaveTicks)t;

                thread.isWorking = true;
                while (thread.isWorking)
                {
                    MessageTick messageTick = null;
                    while (list.TryTake(out messageTick, TimeSpan.FromMilliseconds(10)))
                    {
                        containerTicks.AddEntry(messageTick.Symbol, (int)messageTick.Value, messageTick.DecimalValue, messageTick.DateTime, (byte)messageTick.TickType, messageTick.Provider);
                        AddToSymbolCache(messageTick);

                        if (((int)(DateTime.Now - lastSave).TotalMilliseconds) >= thread.saveIntervalInMs)
                        {
                            // SaveTicks
                            SaveAndSendTicks(containerTicks, thread.ticksRepository);
                            containerTicks = new TicksDataTableContainer();
                            lastSave       = DateTime.Now;
                        }
                    }
                    Thread.Sleep(20);
                }
                if (containerTicks.Count() > 0)
                {
                    SaveAndSendTicks(containerTicks, thread.ticksRepository);
                }
                thread.isFinished = true;
                //Console.WriteLine("FINISHED! Total Save Ticks: " + TotalSavedObjects + "; Total Received Ticks: " + DeserializeTicks.TotalDesObjects);
            }
        }
コード例 #16
0
 // do we need to go planetside?
 private bool checkLeaveShip(MessageTick tick)
 {
     return(false);
 }
コード例 #17
0
 private bool checkUndock(MessageTick tick)
 {
     return(true);
 }
コード例 #18
0
 public void Tick(MessageTick tick)
 {
     updatePlanets(tick);
     updateShips(tick);
 }
コード例 #19
0
 public void Tick(MessageTick tick)
 {
     _goapAgent.Tick();
 }
コード例 #20
0
 public void Tick(MessageTick tick)
 {
     movePlanetXY(tick);
     updateProducers(tick);
 }
コード例 #21
0
ファイル: ActorAgent.cs プロジェクト: AshRolls/GalaxyGen
 private void receiveDefaultTick(MessageTick tick)
 {
     _agentC.Tick(tick);
     sendAgentCompletedMessage();
 }
コード例 #22
0
 private object requestPlanetside(MessageTick tick)
 {
     throw new NotImplementedException();
 }