Пример #1
0
        private void FixedUpdate()
        {
            if (Target == null || Player == null)
            {
                return;
            }

            var playerPos = Player.position + PlayerOffset;
            var targetPos = Target.position + TargetOffset;

            var p2TDir     = targetPos - playerPos;
            var p2TDirFlat = new Vector3(p2TDir.x, 0, p2TDir.z).normalized;
            var p2CDir     = Trans.position - playerPos;
            var p2CDirFlat = new Vector3(p2CDir.x, 0, p2CDir.z).normalized;
            var right      = Mathf.Sign(Vector3.Cross(p2CDirFlat, p2TDirFlat).y);
            var xAxis      = Vector3.Cross(p2TDirFlat, Vector3.up * right).normalized;

            p2TDirFlat = -p2TDirFlat;
            var c2W = new Matrix4x4(
                new Vector4(xAxis.x, 0, xAxis.z, 0),
                new Vector4(0, 1, 0, 0),
                new Vector4(p2TDirFlat.x, 0, p2TDirFlat.z, 0),
                new Vector4(playerPos.x, playerPos.y, playerPos.z, 1));
            var scrollDelta = ControlSys.RequireKey("Axis3", 0).Axis.x *ScrollSensitive;

            _TargetShoulderScale = Mathf.Clamp(_TargetShoulderScale - scrollDelta, 0, MaxShoulderScale);
            ShoulderScale        = Mathf.Lerp(ShoulderScale, _TargetShoulderScale, SmoothFactor);

            _TargetPos = (c2W * (ShoulderOffset * ShoulderScale).ToV4Pos()).ToV3Pos();
            _TargetRot = Quaternion.LookRotation(p2TDir * StaringFactor + playerPos - _TargetPos);
        }
Пример #2
0
        private void FixedUpdate()
        {
            if (Target == null)
            {
                return;
            }
            var deltaAxis = ControlSys.RequireKey("Axis2", 0).Axis *Sensitive;

            _TargetRot.y += deltaAxis.x;
            _TargetRot.x -= deltaAxis.y;

            var tempAngle = LimitAngle / 2;

            _TargetRot.x = Mathf.Clamp(_TargetRot.x, -tempAngle, tempAngle);

            _FixedRot = Quaternion.Lerp(_FixedRot, Quaternion.Euler(_TargetRot), SmoothFactor);

            var scrollDelta = ControlSys.RequireKey("Axis3", 0).Axis.x *Sensitive;

            _TargetFollowRange = Mathf.Clamp(_TargetFollowRange - scrollDelta, 0, MaxFollowRange);
            FollowRange        = Mathf.Lerp(FollowRange, _TargetFollowRange, SmoothFactor);

            deltaAxis     = _FixedRot * Vector3.back * FollowRange;
            _PreTargetPos = Vector3.Lerp(_PreTargetPos, Target.position + TargetOffset, SmoothFactor);
            _FixedPos     = _PreTargetPos + deltaAxis;
        }
Пример #3
0
        static void Main(string[] args)
        {
            //测试
            ControlSys controlSys = new ControlSys(); //门禁系统
            Caller     caller     = new Guest("李明", "送报纸");

            ControlTest(controlSys, caller);
        }
Пример #4
0
        protected override ControlInfo GetMoveControl()
        {
            var ctrl = ControlSys.RequireKey(CtrlKeys.GetKey(MoveKey));

            ctrl.HandleRawAxis();
            ctrl.Axis = Trans.localToWorldMatrix * ctrl.Axis;

            return(ctrl);
        }
Пример #5
0
        /// <summary>
        /// 管理员的工作方法2,监控门铃
        /// </summary>
        /// <param name="controlSys"></param>
        /// <param name="guest"></param>
        public void Work(ControlSys controlSys, Caller caller)
        {
            if (controlSys.Ring == 1)
            {
                Console.WriteLine("访客(" + caller.Name + ")在按门铃");
                this.Work(controlSys);

                controlSys.Ring = 0;
                Console.WriteLine("管理员(" + this.Name + ",工号:" + this.EmpId + ")关闭门铃");
            }
        }
Пример #6
0
        private void MoveCtrl()
        {
            var ctrlInfo = ControlSys.RequireKey(CtrlKeys.GetKey(MoveKey));

            ctrlInfo.HandleRawAxis();
            _MoveSyner.Set(ctrlInfo);

            ctrlInfo = ControlSys.RequireKey(CtrlKeys.GetKey(FastMoveKey));
            _FastMoveSyner.Set(ctrlInfo);

            ctrlInfo = ControlSys.RequireKey(CtrlKeys.GetKey(ScrollHeightKey));
            _ScrollHeightSyner.Set(ctrlInfo);
        }
Пример #7
0
        public void ReadCtrl()
        {
            if (ControlSys.RequireKey(CtrlKeys.GetKey(BuildingModeStartKey)).Down)
            {
                StartingBuildingMode();
                return;
            }

            if (ControlSys.RequireKey(CtrlKeys.GetKey(BuildingModeEndKey)).Down)
            {
                EndingBuildingMode();
            }
        }
Пример #8
0
        /// <summary>
        /// 重写进入验证方法:外来客人按铃
        /// </summary>
        /// <param name="controlSys"></param>
        public override void EnterValidate(ControlSys controlSys)
        {
            Console.WriteLine("外来客人(" + this.Name + ")按门铃," + this.Reason + ",是否允许进入?[y/n]:");
            string btn = Console.ReadLine();

            if (btn.Equals("y"))
            {
                controlSys.Ring = 1;
            }
            else if (btn.Equals("n"))
            {
                return;
            }
        }
Пример #9
0
        /// <summary>
        /// 管理员的工作方法1,开关电子门
        /// </summary>
        /// <param name="controlSys"></param>
        public void Work(ControlSys controlSys)
        {
            Console.WriteLine("管理员(" + this.Name + ",工号:" + this.EmpId + ")是否按开门按钮?[y/n]:");
            string btn = Console.ReadLine();

            if (btn.Equals("y"))
            {
                controlSys.OpenSign = 1;
                Console.WriteLine("管理员(" + this.Name + ",工号:" + this.EmpId + ")按下开门按钮,请入内!");
            }
            else
            {
                Console.WriteLine("管理员(" + this.Name + ",工号:" + this.EmpId + ")拒绝开门");
            }
        }
Пример #10
0
        private void Update()
        {
            var autoReload = Fire(ControlSys.RequireKey(CtrlKeys.GetKey(FireKey)));

            Reload(ControlSys.RequireKey(CtrlKeys.GetKey(ReloadKey)), autoReload);

            if (ControlSys.RequireKey(CtrlKeys.GetKey(AimKey)).Down)
            {
                _AimScope.Switch();
            }
            if (ControlSys.RequireKey(CtrlKeys.GetKey(SwitchFireKey)).Down)
            {
            }
            //MachineGunFireControl.LoopBurstMode();

            _Animator.SetBool(RELOAD, _StickyInputDic.GetBool(RELOAD));
        }
Пример #11
0
        /// <summary>
        /// 管理员的工作方法3,录入新的验证信息
        /// </summary>
        /// <param name="controlSys"></param>
        /// <param name="valType"></param>
        /// <param name="valStr"></param>
        public void Work(ControlSys controlSys, string valType, string valInfo)
        {
            if (valType.Equals("pa"))
            {
                controlSys.ObjComputer.AddPassWord(int.Parse(valInfo));

                Console.WriteLine("管理员(" + this.Name + ",工号:" + this.EmpId + ")录入新的密码验证信息");
            }
            else if (valType.Equals("ca"))
            {
                controlSys.ObjComputer.AddCard(valInfo);
                Console.WriteLine("管理员(" + this.Name + ",工号:" + this.EmpId + ")录入新的胸卡验证信息");
            }

            else
            {
                Console.WriteLine("验证信息录入失败");
            }
        }
Пример #12
0
        private void PlayerCtrl()
        {
            if (ControlSys.RequireKey(CtrlKeys.GetKey(PutKey)).Down)
            {
                if (Put())
                {
                    Debug.Log("Success");
                }
            }

            if (ControlSys.RequireKey(CtrlKeys.GetKey(RotateKey)).Down)
            {
                Rotate(true);
            }

            if (ControlSys.RequireKey(CtrlKeys.GetKey(CancelKey)).Down)
            {
                Cancel();
            }
        }
Пример #13
0
        /// <summary>
        /// 检测玩家输入,做出相应操作
        /// </summary>
        public void InputCheck()
        {
            if (ControlSys.RequireKey(CtrlKeys.GetKey(PreWeaponKey)).Down)
            {
                SwitchWeaponToPre();
            }
            else
            {
                foreach (var pairs in
                         _Keys.Where(pairs =>
                                     ControlSys.RequireKey(pairs.Key, SHIELD_VALUE).Down))
                {
                    SwitchWeapon(pairs.Value);
                    break;
                }
            }

            if (ControlSys.RequireKey(CtrlKeys.GetKey(DropWeaponKey)).Down)
            {
                DropCurrentWeapon();
            }
        }
Пример #14
0
 /// <summary>
 /// 测试门禁系统
 /// </summary>
 /// <param name="controlSys">门禁系统</param>
 /// <param name="caller">访客</param>
 public static void ControlTest(ControlSys controlSys, Caller caller)
 {
     if (caller is Guest)
     {
         Admin admin = new Admin(12, "王石头");    // 管理员
         Console.WriteLine("门禁系统---外来人员测试");
         Console.WriteLine("***************************************************");
         caller.EnterValidate(controlSys);
         admin.Work(controlSys, caller);
         controlSys.Work();
     }
     else if (caller is Employee)
     {
         Console.WriteLine("门禁系统---公司员工测试");
         Console.WriteLine("***************************************************");
         caller.EnterValidate(controlSys);
         controlSys.Work();
     }
     else
     {
         Console.WriteLine("身份不明,拒绝进入");
     }
 }
Пример #15
0
 protected override ControlInfo GetJumpControl()
 {
     return(ControlSys.RequireKey(CtrlKeys.GetKey(JumpKey)));
 }
Пример #16
0
 /// <summary>
 /// 雇员向门禁系统的输入设备输入验证信息
 /// </summary>
 /// <param name="controlSys"></param>
 public override void EnterValidate(ControlSys controlSys)
 {
     controlSys.ObjInputEquip.InputInfo();
 }
Пример #17
0
        }                               //姓名

        /// <summary>
        /// 进入电子门验证
        /// </summary>
        /// <param name="controSys"></param>
        public abstract void EnterValidate(ControlSys controlSys);
Пример #18
0
        private void FixedUpdate()
        {
            //if (Target == null) return;
            //Vector3 targetPos = Target.position + TargetOffset;
            //Vector3 dir = (_TargetDir - targetPos).normalized * Radius;
            //Vector3 input = ControlSys.RequireKey("Axis2", 0).Axis;
            //dir = Quaternion.AngleAxis(Sensitive * input.x, Vector3.up)*dir;
            //_TargetDir = dir + targetPos;
            //float preEulerx = Trans.localEulerAngles.x;
            //if (preEulerx >= 270) preEulerx -= 360;

            //dir = Vector3.Cross(Vector3.down, dir);
            //dir = Quaternion.AngleAxis(OffsetAngle, Vector3.up) * dir;

            //Trans.rotation = Quaternion.LookRotation(dir, Vector3.up);
            //// Trans.localEulerAngles += input.y * Sensitive * Vector3.right;

            //float angle = input.y * -Sensitive + preEulerx;
            //angle = Mathf.Clamp(angle, -UpAngleLimit, UpAngleLimit);
            //dir = Trans.localEulerAngles;
            //dir.x = angle;
            //Trans.localEulerAngles = dir;
            //Debug.Log(Trans.localEulerAngles);

            //// y
            //if (Target == null) return;
            //Vector3 targetPos = Target.position + TargetOffset;
            //Vector3 dir = (_TargetDir - targetPos).normalized * Radius;
            //Vector3 input = ControlSys.RequireKey("Axis2", 0).Axis;
            //float yRotAngle = Sensitive * input.x;
            //Quaternion targetRot = Quaternion.AngleAxis(yRotAngle, Vector3.up);
            //dir = targetRot * dir;
            //_TargetDir = dir + targetPos;
            //Trans.localRotation *= targetRot;

            //// x
            //float preEulerx = Trans.localEulerAngles.x;
            //if (preEulerx >= 270) preEulerx -= 360;
            //float angle = input.y * -Sensitive + preEulerx;
            //angle = Mathf.Clamp(angle, -UpAngleLimit, UpAngleLimit);
            //dir = Trans.localEulerAngles;
            //dir.x = angle;
            //Trans.localEulerAngles = dir;

            //if (Target == null) return;
            //Vector3 input = ControlSys.RequireKey("Axis2", 0).Axis;
            //float yRotAngle = Sensitive * input.x;
            //_TargetDir = Quaternion.AngleAxis(yRotAngle, Vector3.up) * _TargetDir;
            //Vector3 eulerAngle = Trans.eulerAngles;
            //eulerAngle += Vector3.up * yRotAngle;
            //eulerAngle.y %= 360;

            //if (eulerAngle.x >= 270) eulerAngle.x -= 360;
            //eulerAngle.x = Mathf.Clamp(input.y * -Sensitive + eulerAngle.x, -UpAngleLimit, UpAngleLimit);
            //Trans.eulerAngles = eulerAngle;

            //if (Target == null) return;
            //Vector3 input = ControlSys.RequireKey("Axis2", 0).Axis;
            //float yRotAngle = Sensitive * input.x;
            //_TargetDir = Quaternion.AngleAxis(yRotAngle, Vector3.up) * _TargetDir;
            //Vector3 dir = Vector3.Cross(_TargetDir, Vector3.up);
            //dir = Quaternion.AngleAxis(OffsetAngle, Vector3.up) * dir;

            //_TargetRot.y = Vector3.SignedAngle(Vector3.forward, dir,Vector3.up);
            //if (_TargetRot.x >= 270) _TargetRot.x -= 360;
            //_TargetRot.x = Mathf.Clamp(input.y * -Sensitive + _TargetRot.x, -UpAngleLimit, UpAngleLimit);
            //_TargetRot.z = 0;

            if (Target == null)
            {
                return;
            }
            var input     = ControlSys.RequireKey("Axis2", 0).Axis;
            var yRotAngle = Sensitive * input.x;

            _TargetDir = Quaternion.AngleAxis(yRotAngle, Vector3.up) * _TargetDir;
            var dir = Vector3.Cross(_TargetDir, Vector3.up);

            dir = Quaternion.AngleAxis(OffsetAngle, Vector3.up) * dir;

            _TargetRot.y = Vector3.SignedAngle(Vector3.forward, dir, Vector3.up);
            if (_TargetRot.x >= 270)
            {
                _TargetRot.x -= 360;
            }
            _TargetRot.x = Mathf.Clamp(input.y * -Sensitive + _TargetRot.x, -UpAngleLimit, UpAngleLimit);
            _TargetRot.z = 0;

            _TargetPos = Target.position;
        }
Пример #19
0
 protected override ControlInfo GetSquatControl()
 {
     return(ControlSys.RequireKey(CtrlKeys.GetKey(SquatKey)));
 }
Пример #20
0
 private void Update()
 {
     _InteractiveSyn.Set(ControlSys.RequireKey(Config.InteractiveKeyName, 0));
     WeaponBelt.InputCheck();
 }