Example #1
0
        private void DoRender(IntPtr surface, bool isNewSurface)
        {
            if (DisableRendering)
            {
                return;
            }

            var w = _outputWidth;
            var h = _outputHeight;

            if (w <= 0 || h <= 0)
            {
                return;
            }

            if (_activeSystem == null && ActiveSystem != null)
            {
                _activeSystem = ParticleSystem.FromSpec(ActiveSystem.ToSpec());
            }


            if (_timeSinceLastSimul.HasValue)
            {
                var simulTime = (float)(_lastRender.TotalSeconds - _timeSinceLastSimul.Value.TotalSeconds);
                if (simulTime > 1 / 60.0f)
                {
                    _previewModel?.AdvanceTime(simulTime);

                    if (!_model.Paused)
                    {
                        if (_activeSystem != null)
                        {
                            _activeSystem.Simulate(simulTime);
                            UpdateParticleStatistics();
                        }
                    }
                    _timeSinceLastSimul = _lastRender;
                }
            }
            else
            {
                _timeSinceLastSimul = _lastRender;
            }

            _templeDll.SetRenderTarget(surface);

            _templeDll.Scale = _model.Scale;
            _templeDll.CenterOn(0, 0, 0);

            _previewModel?.Render(TempleDll.Instance);
            _activeSystem?.Render();

            _templeDll.Flush();
        }
Example #2
0
 /// <summary>
 /// Add a new system to the storage.
 /// </summary>
 public void Add(BlockPosition position, BotSystem system)
 {
     _systems.Add(position, system);
     if (system is PropulsionSystem propulsion)
     {
         _propulsions.Add(propulsion);
     }
     else if (system is WeaponSystem weapon)
     {
         if (WeaponType == WeaponSystem.Type.None)
         {
             WeaponType = weapon.Constants.Type;
         }
         _weapons.Add(weapon);
     }
     else
     {
         Assert.IsNull(_active, "The active system can only be set once.");
         _active = system as ActiveSystem;
     }
 }
Example #3
0
        /// <summary>
        /// If a system is present at a position, remove it. Returns whether a system was removed.
        /// </summary>
        public bool TryRemove(BlockPosition position)
        {
            if (!_systems.TryGetValue(position, out BotSystem system))
            {
                return(false);
            }

            _systems.Remove(position);
            if (system is PropulsionSystem propulsion)
            {
                _propulsions.Remove(propulsion);
            }
            else if (system is WeaponSystem weapon)
            {
                _weapons.Remove(weapon);
            }
            else
            {
                _active = null;
            }
            return(true);
        }