예제 #1
0
        /// <summary>
        /// Метод обновления параметров объекта.
        /// </summary>
        public override void Update()
        {
            Pos.X = Pos.X + Dir.X;
            Pos.Y = Pos.Y + Dir.Y;

            if (Pos.X < -Size.Width)
            {
                //Если объект доходит до края экрана, то генерируется событие
                EventMessage?.Invoke(this, new MessageEventArgs("Корабль не был уничтожен, и теперь планета в опасности.", -10, MessageEventArgs.EventTypeEnum.OutOfScreen));
            }

            if (Pos.Y < 0 || Pos.Y > ScreenSize.Height) //Если объект доходит до края экрана по оси Y, он меняет направление движения по оси Y на противоположное
            {
                Dir.Y *= -1;
            }
            else
            {
                Dir.Y = Rand.Next(-10, 10);           //Направление и скорость движения по оси Y выбирается случайным образом
            }
            if (CooldownCounter == 0 && CooldownFlag) // перезарядка оружия (CooldownFlag=true значит идет перезарядка)
            {
                CooldownFlag = false;
            }
            else if (CooldownCounter > 0 && CooldownFlag)
            {
                CooldownCounter--;
            }
        }
예제 #2
0
 /// <summary>
 /// Метод, описывающий получение урона.
 /// </summary>
 /// <param name="damage">Количество жизней, которые следует отнять у объекта</param>
 public void GetDamage(int damage)
 {
     System.Media.SystemSounds.Asterisk.Play();
     Health -= damage;
     EventMessage?.Invoke(this, new MessageEventArgs("Корабль получил повреждения.", damage, MessageEventArgs.EventTypeEnum.GotDamage));
     if (Health <= 0)
     {
         Die();
     }
 }
예제 #3
0
 private void RaiseEventMessage()
 {
     try
     {
         EventMessage?.Invoke();
     }
     catch
     {
     }
 }
예제 #4
0
 /// <summary>
 /// Метод, описывающий лечение объекта.
 /// </summary>
 /// <param name="health">количество здоровья, на которое следует увеличить жизни объекта.</param>
 public void GetHealed(int health)
 {
     if (Health < MaxHealth)
     {
         System.Media.SystemSounds.Beep.Play();
         Health += health;
     }
     if (Health > MaxHealth)
     {
         Health = MaxHealth;
         EventMessage?.Invoke(this, new MessageEventArgs("Прочность корабля полностью восстановлена.", health, MessageEventArgs.EventTypeEnum.Healed));
     }
     else
     {
         EventMessage?.Invoke(this, new MessageEventArgs("Корабль игрока отремантирован...", health, MessageEventArgs.EventTypeEnum.Healed));
     }
 }
예제 #5
0
        private static void SecondSession()
        {
            Guid id = Guid.NewGuid();

            var session = WebRtcManager.AddSession(id.ToString());

            ManualResetEvent offerEvt = new ManualResetEvent(false);
            string           offer    = string.Empty;

            EventMessage += (s, ex) =>
            {
                if (ex.Msg.Source == id)
                {
                    return;
                }
                else if (ex.Msg.Sdp.Type == SdpTypes.Answer)
                {
                    session.Spitfire.SetOfferReply(ex.Msg.Sdp.Type.ToString().ToLower(), ex.Msg.Sdp.Sdp);
                }
            };
            session.OnIceCandidateFound += (s, ex) =>
            {
                EventMessage.Invoke(null, new EventMessageEventArgs(new Message(id, null, null, ex.IceCandidate)));
            };
            session.Spitfire.OnSuccessOffer += (ex) =>
            {
                offer = ex.Sdp;
                offerEvt.Set();
            };
            session.DataChannelOpened += (s, ex) =>
            {
                session.Spitfire.DataChannelSendText("default", "Hello World!!! Data channel is open");
            };
            session.Spitfire.CreateOffer();
            offerEvt.WaitOne();
            EventMessage.Invoke(null, new EventMessageEventArgs(new Message(id, offer)));
            offerEvt.Reset();
            offerEvt.WaitOne();
        }
예제 #6
0
        private static void SecondSession2()
        {
            Guid id = Guid.NewGuid();

            ManualResetEvent offerEvt = new ManualResetEvent(false);
            ManualResetEvent waitEvt  = new ManualResetEvent(false);

            string        offer   = string.Empty;
            WebRtcSession session = null;
            List <SpitfireIceCandidate> candidates = new List <SpitfireIceCandidate>();

            EventMessage += (s, ex) =>
            {
                if (ex.Msg.Source == id)
                {
                    return;
                }

                if (session == null && ex.Msg.IceCandidate != null)
                {
                    candidates.Add(ex.Msg.IceCandidate);
                }
                else if (session == null)
                {
                    offerEvt.Set();
                    offer = ex.Msg.Msg;
                }
                else if (ex.Msg.IceCandidate != null)
                {
                    if (!session.Spitfire.AddIceCandidate(ex.Msg.IceCandidate.SdpMid, ex.Msg.IceCandidate.SdpIndex, ex.Msg.IceCandidate.Sdp))
                    {
                        Console.WriteLine("Unable to add");
                    }
                }
            };
            offerEvt.WaitOne();

            session = WebRtcManager.AddSession(id.ToString(), offer);
            session.Spitfire.OnDataMessage += (s, ex) =>
            {
                Console.WriteLine("Meesage from peer:" + ex);
            };
            while (session.AnswerSdp == null)
            {
                Thread.Sleep(100);
            }
            EventMessage.Invoke(null, new EventMessageEventArgs(new Message(id, "Answer", session.AnswerSdp)));

            if (candidates.Count > 0)
            {
                foreach (var c in candidates)
                {
                    if (!session.Spitfire.AddIceCandidate(c.SdpMid, c.SdpIndex, c.Sdp))
                    {
                        Console.WriteLine("Unable to add");
                    }
                }
            }

            while (true)
            {
                if (waitEvt.WaitOne(100))
                {
                    break;
                }
            }
        }
예제 #7
0
 /// <summary>
 /// Метод, описывающий смерть объекта.
 /// </summary>
 public void Die()
 {
     System.Media.SystemSounds.Exclamation.Play();
     EventMessage?.Invoke(this, new MessageEventArgs("Корабль игрока уничтожен.", ScoredPoints, MessageEventArgs.EventTypeEnum.Killed));
 }
예제 #8
0
 public void Message(int playerID, string text)
 {
     EventMessage?.Invoke(playerID, text);
 }
예제 #9
0
 public static void OnEventMessage() => EventMessage?.Invoke();
예제 #10
0
 /// <summary>
 /// Метод, описывающий смерть врага.
 /// </summary>
 public void Die()
 {
     System.Media.SystemSounds.Exclamation.Play();
     EventMessage?.Invoke(this, new MessageEventArgs("Враг уничтожен!", Points, MessageEventArgs.EventTypeEnum.Killed));
 }
예제 #11
0
 /// <summary>
 /// 事件信息
 /// </summary>
 /// <param name="eventInfo"></param>
 private void Op_CHDEventInfo(CHDEventInfo eventInfo)
 {
     EventMessage?.Invoke(eventInfo);
 }
예제 #12
0
 public void InvokeEvent()
 {
     EventMessage?.Invoke();
 }