/// <summary> /// 收集下一帧操作并发送到服务器 /// </summary> private void CollectNextFrameOpts() { var nfo = new NextFrameOpts { frameid = this.sync_frameid + 1, zoneid = NetInfo.zoneId, roomid = NetInfo.roomid, seatid = NetInfo.seatid, }; #region 采集操作 //遥感 var stick = new OptionEvent { seatid = NetInfo.seatid, optype = (int)OptType.JoyStick, x = (int)(this._joystick.TouchDir.x * (1 << 16)), y = (int)(this._joystick.TouchDir.y * (1 << 16)), }; nfo.opts.Add(stick); //攻击 //技能 #endregion LogicServiceProxy.Instance.SendNextFrameOpts(nfo); }
private void capture_player_opts() { NextFrameOpts next_frame = new NextFrameOpts(); ugame ugame_instance = ugame.Instance; next_frame.next_frameid = this.sync_frameid + 1; next_frame.matchid = ugame_instance.matchid; next_frame.zid = ugame_instance.zid; next_frame.seatid = ugame_instance.self_seatid; //攻击 if (this.ui_attack.attack_type != (int)OptType.Invalid) // 有攻击按钮按下了; { OptionEvent opt_attack = new OptionEvent(); opt_attack.seatid = ugame.Instance.self_seatid; opt_attack.opt_type = this.ui_attack.attack_type; next_frame.next_opts.Add(opt_attack); } else { // 摇杆 OptionEvent opt_stick = new OptionEvent(); opt_stick.seatid = ugame.Instance.self_seatid; opt_stick.opt_type = (int)OptType.JoyStick; opt_stick.x = (int)(this.stick.dir.x * (1 << 16)); // 16.16 opt_stick.y = (int)(this.stick.dir.y * (1 << 16)); // 16.16 next_frame.next_opts.Add(opt_stick); // end } //发送给服务器 logic_service_proxy.Instance.send_next_frame_opts(next_frame); //end }
private void CapturePlayerOpts() { NextFrameOpts nextFrameOpts = new NextFrameOpts(); nextFrameOpts.frameid = this._syncFrameID + 1; nextFrameOpts.zid = UGame.Instance.zid; nextFrameOpts.matchid = UGame.Instance.matchid; nextFrameOpts.seatid = UGame.Instance.selfSeatid; if (this.uiAttack.attackType != (int)OptType.Invalid) {//有攻击按钮按下了 //攻击操作收集 OptionEvent optAttack = new OptionEvent(); optAttack.seatid = UGame.Instance.selfSeatid; optAttack.opt_type = this.uiAttack.attackType; nextFrameOpts.opts.Add(optAttack); } else { //摇杆操作收集 OptionEvent optStick = new OptionEvent(); optStick.seatid = UGame.Instance.selfSeatid; optStick.opt_type = (int)OptType.JoyStick; optStick.x = (int)(this.stick.TouchDir.x * (1 << 16)); //定点数 optStick.y = (int)(this.stick.TouchDir.y * (1 << 16)); //定点数 nextFrameOpts.opts.Add(optStick); } //发送给服务器 LogicServiceProxy.Instance.SendNextFrameOpts(nextFrameOpts); }
public static PacketDistributed CreatePacket(MessageID packetID) { PacketDistributed packet = null; switch (packetID) { case MessageID.GCErrorBack: { packet = new GCErrorBack(); } break; case MessageID.CGheartbeatClientSend: { packet = new CGheartbeatClientSend(); } break; case MessageID.GCheartbeatServerBack: { packet = new GCheartbeatServerBack(); } break; case MessageID.GCServerMsg: { packet = new GCServerMsg(); } break; case MessageID.OptionEvent: { packet = new OptionEvent(); } break; case MessageID.FrameOpts: { packet = new FrameOpts(); } break; case MessageID.LogicFrame: { packet = new LogicFrame(); } break; case MessageID.NextFrameOpts: { packet = new NextFrameOpts(); } break; case MessageID.GamePlayerInfo: { packet = new GamePlayerInfo(); } break; case MessageID.EnterGame: { packet = new EnterGame(); } break; } if (null != packet) { packet.packetID = packetID; } //netActionTime = DateTime.Now.ToFileTimeUtc(); return(packet); }
//采集玩家的下一个操作帧 void capture_player_opts() { NextFrameOpts next_frame = new NextFrameOpts(); next_frame.frameid = this.sync_frameid + 1; next_frame.zid = ugames.Instance.zid; next_frame.matchid = ugames.Instance.matchid; next_frame.seatid = ugames.Instance.self_seatid; //遥杆 OptionEvent opt_stick = new OptionEvent(); opt_stick.seatid = ugames.Instance.self_seatid; opt_stick.opttype = (int)OptType.JoyStick; //Debug.Log(this.stick.dir.y + " ---dirx--- " + this.stick.dir.x); opt_stick.x = (int)(this.stick.dir.x * (1 << 16)); opt_stick.y = (int)(this.stick.dir.y * (1 << 16)); //Debug.Log(opt_stick.y + " ---ed---- " + opt_stick.x); //opt_stick.x = (int)this.stick.dir.x; //opt_stick.y = (int)this.stick.dir.y; next_frame.opts.Add(opt_stick); //end //攻击 //end //发送给服务器 logic_service.Instance.send_next_frame_opts(next_frame); //end }
public void Initialize(StartEvent startEvent, RankEvent rankEvent, OptionEvent optionEvent) { Initialize(); this._startEvent = startEvent; this._rankEvent = rankEvent; this._optionEvent = optionEvent; }
private void sync_last_joystic_event(OptionEvent opt) { this.stick_x = opt.x; this.stick_y = opt.y; this.transform.position = this.logic_position; this.do_joystick_event(game_zygote.LOGIC_FRAME_TIME_FLOAT); this.logic_position = this.transform.position; }
/// <summary> /// 根据上一帧逻辑位置,计算出这一帧到达时所在的位置(服务器同步位置) /// </summary> /// <param name="opt"></param> private void SyncLastJoystickEvent(OptionEvent opt) { //上一个逻辑位置--->deltaTime为服务器的逻辑帧间隔 this._stickX = opt.x; this._stickY = opt.y; this.transform.position = this._logicPosition; DoJoystickEvent((float)GameZygote.LOGIC_FRAME_TIME / 1000.0f); this._logicPosition = this.transform.position; }
//英雄来处理我们的帧事件 public void on_handler_frame_event(OptionEvent opt) { switch (opt.opttype) { case (int)OptType.JoyStick: this.handle_joystic_event(opt); break; } }
public void OnSyncLastLogicFrame(OptionEvent opt) { switch (opt.opt_type) { case (int)OptType.JoyStick: SyncLastJoystickEvent(opt); break; } }
private void handle_joystic_event(OptionEvent opt) { this.stick_x = opt.x; this.stick_y = opt.y; if (this.stick_x == 0 && this.stick_y == 0) { this.logic_state = CharacterState.idle; } else { this.logic_state = CharacterState.walk; } }
/// <summary> /// 用来更新本地动画与位置(非服务器同步位置) /// </summary> /// <param name="opt"></param> private void HandleJoyStickEvent(OptionEvent opt) { this._stickX = opt.x; this._stickY = opt.y; if (this._stickX == 0 && this._stickY == 0) { this._logicState = CharacterState.idle; } else { this._logicState = CharacterState.walk; } }
public void on_sync_last_logic_frame(OptionEvent opt) { OptType opt_type = (OptType)opt.opt_type; switch (opt_type) { case OptType.JoyStick: this.sync_last_joystic_event(opt); break; default: break; } }
/// <summary> /// 同步之前收到的最后一帧的处理结果 /// </summary> /// <param name="opt"></param> /// <exception cref="NotImplementedException"></exception> public void OnAsyncLastLogicFrame(OptionEvent opt) { switch ((OptType)opt.optype) { case OptType.JoyStick: this.stick_x = opt.x; this.stick_y = opt.y; var before = this.logicPosition; this.transform.position = this.logicPosition; DoJoystick(LogicConfig.LogicFrameTime / 1000f); this.logicPosition = this.transform.position; print("前进:" + (this.logicPosition - before).magnitude); break; } }
/// <summary> /// 角色处理帧事件 /// </summary> public void OnHandlerFrameEvent(OptionEvent opt) { switch (opt.opt_type) { case (int)OptType.JoyStick: HandleJoyStickEvent(opt); break; case (int)OptType.Attack: DoAttack(opt); break; case (int)OptType.Skill1: DoSkill1(opt); break; } }
private void DoSkill1(OptionEvent opt) { float validR = GameConfig.NormalHeroLevelConfigs[this.level] .Skill.ValidR; int value = GameConfig.NormalHeroLevelConfigs[this.level] .Skill.Value; List <GameObject> targets = GameZygote.Instance.FindTargets(this .side, this.transform.position, validR); if (this._logicAttack.AttackAll( targets, value, 8, 11)) { this._animState = CharacterState.skill; this._logicState = CharacterState.skill; this._animation.CrossFade("skill"); } }
/// <summary> /// 更新当前帧逻辑 /// </summary> /// <param name="opt"></param> /// <exception cref="NotImplementedException"></exception> public void OnHandlerCurrentLogicFrame(OptionEvent opt) { switch ((OptType)opt.optype) { case OptType.JoyStick: this.stick_x = opt.x; this.stick_y = opt.y; if (this.stick_x == 0 && this.stick_y == 0) { this.logicState = HeroState.Idle; } else { this.logicState = HeroState.Walk; } break; } }
private void DoAttack(OptionEvent opt) { float validR = GameConfig.NormalHeroLevelConfigs[this.level] .Attack.ValidR; int value = GameConfig.NormalHeroLevelConfigs[this.level] .Attack.Value; GameObject target = GameZygote.Instance.FindHeroAttackTarget (this.side, this.transform.position, validR); if (target) { this.transform.LookAt(target.transform); } if (this._logicAttack.AttackTo( target, value, 8, 11)) { this._animState = CharacterState.attack; this._logicState = CharacterState.attack; this._animation.CrossFade("attack"); } }
public void on_handler_frame_event(OptionEvent opt) { OptType opt_type = (OptType)opt.opt_type; switch (opt_type) { case OptType.JoyStick: this.handle_joystic_event(opt); break; case OptType.Attack: this.do_attack(); break; case OptType.Skill1: this.do_skill1(); break; default: break; } }
/// <summary> /// 跳帧 /// </summary> /// <param name="opt"></param> public void OnJumpToNextFrame(OptionEvent opt) { OnAsyncLastLogicFrame(opt); }
private void JumpJoystickEvent(OptionEvent opt) { SyncLastJoystickEvent(opt); }