Beispiel #1
0
        public void PresentOne(VehicleInstance vi)
        {
            //			if(_game.ShowVehicleProbes)
            //				r.AddDrawable(_targetLine);

            var spr = _sprite.Add();

            if((vi.Flags & Sim.VehicleStatePacket.HurtFlag) != 0)
            {
                vi.HurtTimer.Reset();
            }

            spr.X = vi.Position.X;
            spr.Y = vi.Position.Y;
            spr.Angle = (ushort)((vi.Angle-1024) & 4095);

            if(vi.HurtTimer.Progress > 0.0f)
            {
                float flash = (float)Math.Pow(1.0f-vi.HurtTimer.Progress, 2.0f);
                float amount = (float)Math.Pow((1.0f-((float)vi.HitPoints)/vi.MaxHitPoints), 3.0f);

                amount = Util.Lerp(0.0f, 1.5f, amount);
                spr.Color = new Color4(1.0f * amount, flash * amount, flash * amount, 1.0f);
            }
            else
            {
                spr.Color = new Color4(0f,0f,0f,1f);
            }

            vi.HurtTimer.Tick();
        }
Beispiel #2
0
        public void Present(IEnumerable<ObjectStatePair> ous, float k)
        {
            foreach(var p in _presenters)
            {
                p.Value.BeginPresent();
            }

            _healthBars.Clear();

            foreach(var osp in ous)
            {
                var cur = (Sim.VehicleStatePacket)osp.Current;
                var prev = (Sim.VehicleStatePacket)osp.Previous;

                if(cur == null)
                {
                    _instances.Remove(prev.Uid);
                    continue;
                }

                VehicleInstance vi;
                if(!_instances.TryGetValue(cur.Uid, out vi))
                {
                    vi = new VehicleInstance()
                           	{
                                Presenter = _presenters[cur.TypeId],
                                HurtTimer = new Timer(TimerMode.CountDown, 5)
                            };
                    _instances.Add(cur.Uid, vi);
                }

                if(prev == null)
                {
                    vi.Position = cur.Position;
                    vi.Angle = cur.Angle;
                    vi.HitPoints = cur.HitPoints;
                    vi.MaxHitPoints = cur.MaxHitPoints;
                }
                else
                {
                    vi.Position = Vector2.Lerp(prev.Position, cur.Position, k);
                    vi.Angle =  Util.LerpAngle(prev.Angle, cur.Angle, k);
                    vi.HitPoints = Util.Lerp(prev.HitPoints, cur.HitPoints, k);
                    vi.MaxHitPoints = Util.Lerp(prev.MaxHitPoints, cur.MaxHitPoints, k);
                }

                vi.Presenter.PresentOne(vi);

                int hpFrame = (int)(29.0f * ((float)vi.HitPoints)/vi.MaxHitPoints);
                _healthBars.Add(vi.Position.X, vi.Position.Y-20, hpFrame);
            }

            _renderer.AddDrawable(_healthBars);

            foreach(var p in _presenters)
            {
                p.Value.EndPresent();
            }
        }