public WaitForTargetFrameRate(MyGameTimer timer, float targetFrequency = 59.75f)
 {
     m_timer = timer;
     m_targetFrequency = targetFrequency;
     m_handler = new MyTimer.TimerEventHandler((a, b, c, d, e) =>
     {
         m_waiter.Set();
     });
 }
Exemplo n.º 2
0
 public WaitForTargetFrameRate(MyGameTimer timer, float targetFrequency = 59.75f)
 {
     m_timer           = timer;
     m_targetFrequency = targetFrequency;
     m_handler         = new MyTimer.TimerEventHandler((a, b, c, d, e) =>
     {
         m_waiter.Set();
     });
 }
Exemplo n.º 3
0
 /// <summary>
 /// Construct Anima class.
 /// </summary>
 /// <remarks>Don't forget to call Init(MyEntity, string, string) to initialize!</remarks>
 public Anima()
 {
     m_entity = null;
     m_modelsFolder = null;
     m_partList = new List<AnimaPart>();
     m_inRange = true;
     m_gameTimer = new MyGameTimer();
     m_lastElapse = m_gameTimer.Elapsed.Seconds;
     m_instances++;
 }
Exemplo n.º 4
0
        private MyRenderThread(MyGameTimer timer, bool separateThread)
        {
            m_timer = timer;

            if (separateThread)
            {
                SystemThread = new Thread(new ParameterizedThreadStart(RenderThreadStart));
                //RenderThread.Priority = ThreadPriority.AboveNormal;
                SystemThread.IsBackground = true; // Do not prevent app from terminating
                SystemThread.Name = "Render thread";
                SystemThread.CurrentCulture = CultureInfo.InvariantCulture;
                SystemThread.CurrentUICulture = CultureInfo.InvariantCulture;
            }
            else
            {
                SystemThread = Thread.CurrentThread;
            }
        }
Exemplo n.º 5
0
 private static void Entities_OnCloseAll()
 {
     MyAPIGateway.Entities.OnCloseAll -= Entities_OnCloseAll;
     DoTests = null;
     Path = null;
     Timer = null;
     s_logger = null;
 }
Exemplo n.º 6
0
        public static MyRenderThread StartSync(MyGameTimer timer, IMyRenderWindow renderWindow, MyRenderDeviceSettings? settingsToTry, MyRenderQualityEnum renderQuality)
        {
            var result = new MyRenderThread(timer, false);
            result.m_renderWindow = renderWindow;
            result.m_settings = MyRenderProxy.CreateDevice(result, renderWindow.Handle, settingsToTry);
            MyRenderProxy.SendCreatedDeviceSettings(result.m_settings);

            result.m_currentQuality = renderQuality;
            result.m_form = System.Windows.Forms.Control.FromHandle(renderWindow.Handle);

            result.LoadContent();
            result.UpdateSize();
            return result;
        }
Exemplo n.º 7
0
 public static MyRenderThread Start(MyGameTimer timer, InitHandler initHandler, MyRenderDeviceSettings? settingsToTry, MyRenderQualityEnum renderQuality)
 {
     var result = new MyRenderThread(timer, true);
     result.SystemThread.Start(new StartParams() { InitHandler = initHandler, SettingsToTry = settingsToTry, RenderQuality = renderQuality });
     return result;
 }
Exemplo n.º 8
0
        private void updateFoodLogic()
        {
            float elapsedMinutes = (float)(mTimer.Elapsed.Seconds / 60);

            foreach (IMyPlayer player in mPlayers)
            {
                if (player.Controller != null && player.Controller.ControlledEntity != null && player.Controller.ControlledEntity.Entity != null)
                {
                    PlayerData playerData = mPlayerDataStore.get(player);
                    IMyEntity entity = GetCharacterEntity(player.Controller.ControlledEntity.Entity);

                    //MyAPIGateway.Utilities.ShowMessage("DEBUG", "State: " + character.MovementState);
                    //if(playerData.entity != null) {
                    //    MyAPIGateway.Utilities.ShowMessage  ("DEBUG", "Entity: " + playerData.entity.Closed);
                    //}

                    float CurrentModifier = DEFAULT_MODIFIER;

                    if (entity is IMyCharacter)
                    {
                        MyObjectBuilder_Character character = entity.GetObjectBuilder(false) as MyObjectBuilder_Character;

                        if (playerData.entity == null || playerData.entity.Closed || playerData.entity.EntityId != entity.EntityId)
                        {
                            bool bReset = false;

                            if (!playerData.loaded)
                            {
                                bReset = true;
                                playerData.loaded = true;
                            }
                            else if ((playerData.entity != null) && (playerData.entity != entity)) bReset = true;

                            if (bReset)
                            {
                                playerData.hunger = 100f;
                                playerData.thirst = 100f;
                            }

                            playerData.entity = entity;
                        }

                        switch (character.MovementState)
                        {
                            case MyCharacterMovementEnum.Flying:
                                CurrentModifier = FLYING_MODIFIER;
                                break;
                            case MyCharacterMovementEnum.Running:
                            case MyCharacterMovementEnum.Backrunning:
                            case MyCharacterMovementEnum.RunStrafingLeft:
                            case MyCharacterMovementEnum.RunStrafingRight:
                            case MyCharacterMovementEnum.RunningRightFront:
                            case MyCharacterMovementEnum.RunningRightBack:
                            case MyCharacterMovementEnum.RunningLeftBack:
                            case MyCharacterMovementEnum.RunningLeftFront:
                                CurrentModifier = RUNNING_MODIFIER;
                                break;

                            case MyCharacterMovementEnum.Sprinting:
                                CurrentModifier = SPRINTING_MODIFIER;
                                break;
                        }
                    }
                    else if (playerData.entity != null || !playerData.entity.Closed) entity = playerData.entity;

                    // Rise the thirst
                    if (playerData.thirst > 0)
                    {
                        playerData.thirst -= elapsedMinutes * mThirstPerMinute * CurrentModifier;
                        playerData.thirst = Math.Max(playerData.thirst, 0);
                    }

                    // Rise the hunger
                    if (playerData.hunger > 0)
                    {
                        playerData.hunger -= elapsedMinutes * mHungerPerMinute * CurrentModifier;
                        playerData.hunger = Math.Max(playerData.hunger, 0);
                    }

                    // Eat
                    if (playerData.hunger < 30) playerEatSomething(entity, playerData);

                    // Drink
                    if (playerData.thirst < 30) playerDrinkSomething(entity, playerData);

                    // Get some damages for not being well feed!

                    if (playerData.thirst <= 0 || playerData.hunger <= 0)
                    {
                        var destroyable = entity as IMyDestroyableObject;
                        destroyable.DoDamage(DAMAGE_SPEED, MyStringHash.GetOrCompute("Hunger/Thirst"), true);
                    }

                    string message = MyAPIGateway.Utilities.SerializeToXML<PlayerData>(playerData);
                    MyAPIGateway.Multiplayer.SendMessageTo(
                        1337,
                        Encoding.Unicode.GetBytes(message),
                        player.SteamUserId
                    );
                }
            }

            // Reinitialize the timer

            mTimer = new MyGameTimer();
        }
Exemplo n.º 9
0
        private void init()
        {
            mPlayerDataStore.Load();

            if (Utils.isDev()) MyAPIGateway.Utilities.ShowMessage("SERVER", "INIT");

            MyAPIGateway.Multiplayer.RegisterMessageHandler(1338, AdminCommandHandler);

            // Minimum of 2h, because it's unplayable under....

            float dayLen = Math.Max(MyAPIGateway.Session.SessionSettings.SunRotationIntervalMinutes, 120f);

            mHungerPerMinute = HUNGER_PER_DAY / dayLen;
            mThirstPerMinute = THIRST_PER_DAY / dayLen;

            // Registering drinks

            Server.RegisterBeverage("WaterFood", 10f);
            Server.RegisterBeverage("CoffeeFood", 15f);

            // Registering foods

            Server.RegisterFood("WarmFood", 20f);
            Server.RegisterFood("FreshFood", 15f);
            Server.RegisterFood("GummybearsFood", 5f);
            Server.RegisterFood("SyntheticFood", 3f);

            // Initiate the timer

            mTimer = new MyGameTimer();
        }
Exemplo n.º 10
0
 internal MyStatToken(MyGameTimer timer, MyStat stat)
 {
     m_timer = timer;
     m_startTime = timer.Elapsed;
     m_stat = stat;
 }
Exemplo n.º 11
0
 public void StartSync(MyGameTimer timer, IMyRenderWindow window, MyRenderDeviceSettings? settings, MyRenderQualityEnum renderQuality, float maxFrameRate)
 {
     RenderThread = MyRenderThread.StartSync(timer, window, settings, renderQuality, maxFrameRate);
 }
Exemplo n.º 12
0
 /// <summary>
 /// Creates and starts render thread
 /// </summary>
 public void Start(MyGameTimer timer, InitHandler windowInitializer, MyRenderDeviceSettings? settingsToTry, MyRenderQualityEnum renderQuality, float maxFrameRate)
 {
     RenderThread = MyRenderThread.Start(timer, windowInitializer, settingsToTry, renderQuality, maxFrameRate);
 }
Exemplo n.º 13
0
		public static double GetMean(Action action, int iterations = 1, bool extraFirst = false)
		{
			VRage.Exceptions.ThrowIf<ArgumentNullException>(action == null, "action");
			VRage.Exceptions.ThrowIf<ArgumentOutOfRangeException>(iterations < 1, "iterations < 1");

			if (extraFirst)
				action.Invoke();
			MyGameTimer actionTimer = new MyGameTimer();
			for (int i = 0; i < iterations; i++)
				action.Invoke();
			return actionTimer.Elapsed.Seconds / iterations;
		}
Exemplo n.º 14
0
		/// <summary>
		/// Time an Action
		/// </summary>
		/// <param name="action">Action to perform</param>
		/// <param name="iterations">Number of iterations of action</param>
		/// <param name="ignoreFirst">Perform an extra invokation first, that will not be timed.</param>
		/// <returns>Results of timing</returns>
		/// <exception cref="ArgumentNullException">If action == null</exception>
		/// <exception cref="ArgumentOutOfRangeException">If iterarions &lt; 1</exception>
		public static Results Time(Action action, int iterations = 1, bool extraFirst = false)
		{
			VRage.Exceptions.ThrowIf<ArgumentNullException>(action == null, "action");
			VRage.Exceptions.ThrowIf<ArgumentOutOfRangeException>(iterations < 1, "iterations < 1");

			if (extraFirst)
				action.Invoke();
			ListSnapshots<MyTimeSpan> unsortedResults = new ListSnapshots<MyTimeSpan>(iterations);
			ReadOnlyList<MyTimeSpan> mutable = unsortedResults.mutable();
			for (int i = 0; i < iterations; i++)
			{
				MyGameTimer actionTimer = new MyGameTimer();
				action.Invoke();
				mutable.Add(actionTimer.Elapsed);
			}
			return new Results(unsortedResults);
		}
Exemplo n.º 15
0
 public void Start()
 {
     timer = new MyGameTimer();
 }
Exemplo n.º 16
0
        private void CalculateInertiaMoment()
        {
            m_logger.debugLog("recalculating inertia moment", Logger.severity.INFO);
            MyGameTimer timer = new MyGameTimer();

            List<IMySlimBlock> blocks = ResourcePool<List<IMySlimBlock>>.Get();
            m_calcInertiaMoment = Vector3.Zero;
            AttachedGrid.RunOnAttachedBlock(myGrid, AttachedGrid.AttachmentKind.Physics, block => {
                blocks.Add(block);
                return false;
            }, true);

            foreach (var block in blocks)
                AddToInertiaMoment(block);
            blocks.Clear();
            ResourcePool<List<IMySlimBlock>>.Return(blocks);

            using (m_lock.AcquireExclusiveUsing())
            {
                m_inertiaMoment = m_calcInertiaMoment;
                m_invertedInertiaMoment = 1f / m_inertiaMoment;
            }

            m_logger.debugLog("Calculated in " + timer.Elapsed.ToPrettySeconds());
            m_logger.debugLog("Inertia moment: " + m_inertiaMoment, Logger.severity.DEBUG);
            m_logger.debugLog("Inverted inertia moment: " + m_invertedInertiaMoment, Logger.severity.DEBUG);

            m_updating = false;
        }