示例#1
0
 public void LoadFinish()
 {
     state = CtrlState.Inactive;
     this.finishCallback?.Invoke();
     //this.finishCallback = null;
     this.OnLoadFinish();
 }
示例#2
0
        /// <summary>
        /// Change female animation/position
        /// </summary>
        /// <param name="path"></param>
        /// <param name="name"></param>
        private IEnumerator ChangeMotion(string path, string name)
        {
            PushLimbAutoAttachButton(true);

            if (femaleSpinePos == null)
            {
                femaleSpinePos = new GameObject("femaleSpinePos");
            }
            femaleSpinePos.transform.position = femaleBase.transform.position;
            femaleSpinePos.transform.rotation = femaleBase.transform.rotation;

            CtrlState oldState = currentCtrlstate;

            currentCtrlstate = CtrlState.Following;

            Animator component = female_p_cf_bodybone.GetComponent <Animator>();
            RuntimeAnimatorController  runtimeAnimatorController  = CommonLib.LoadAsset <RuntimeAnimatorController>(path, name, false, string.Empty);
            AnimatorOverrideController animatorOverrideController = new AnimatorOverrideController(component.runtimeAnimatorController);

            foreach (AnimationClip animationClip in new AnimatorOverrideController(runtimeAnimatorController).animationClips)
            {
                animatorOverrideController[animationClip.name] = animationClip;
            }
            animatorOverrideController.name     = runtimeAnimatorController.name;
            component.runtimeAnimatorController = animatorOverrideController;
            AssetBundleManager.UnloadAssetBundle(path, true, null, false);

            for (int k = 0; k < 2; k++)
            {
                yield return(null);
            }
            currentCtrlstate = oldState;
            yield break;
        }
示例#3
0
 private void FirePollEvent(uint port, CtrlState state)
 {
     if (Interrupt != null)
     {
         Interrupt(port, state, _controllerNumber);
     }
 }
示例#4
0
 public void Pause()
 {
     if (pd != null && state != CtrlState.Stop)
     {
         state = CtrlState.Pause;
     }
 }
示例#5
0
 void DIO8_MCP22_Manager_Interrupt(uint port, CtrlState state, uint controller)
 {
     if (Interrupt != null)
     {
         Interrupt(port, state, controller);
     }
 }
示例#6
0
 public Ctrl()
 {
     number = new PNumber();
     editor = new PEditor(number.ToString());
     proc   = new Processor();
     memory = new Memory(new PNumber());
     state  = CtrlState.Editing;
 }
        public void CopyFrom(VesselFlightStateUpdate update)
        {
            VesselId      = update.VesselId;
            GameTimeStamp = update.GameTimeStamp;
            SubspaceId    = update.SubspaceId;

            CtrlState.CopyFrom(update.CtrlState);
        }
        public VesselFlightStateUpdate(VesselFlightStateMsgData msgData)
        {
            VesselId      = msgData.VesselId;
            GameTimeStamp = msgData.GameTime;
            SubspaceId    = msgData.SubspaceId;

            CtrlState.CopyFrom(msgData);
        }
示例#9
0
 public void Exit()
 {
     if (loadRequest != null)
     {
         loadRequest.Release();
     }
     state = CtrlState.Release;
     this.OnExit();
 }
        public void CopyFrom(Vessel vessel)
        {
            if (vessel == null)
            {
                return;
            }

            CtrlState.CopyFrom(vessel.ctrlState);
        }
示例#11
0
    //当前帧执行什么动画
    void DoActor()
    {
        //根据walk的方向决定图片朝向
        if (actor.walk > 0)
        {
            if (spriteRenderer.flipX == true)
            {
                spriteRenderer.flipX = false;
            }
        }
        else if (actor.walk < 0)
        {
            if (spriteRenderer.flipX == false)
            {
                spriteRenderer.flipX = true;
            }
        }
        //如果只是走,就播放 走的动画
        if (actor.walk != 0 && grounded)
        {
            anim.SetFloat("Speed", Math.Abs(actor.walk));
        }
        //如果不动,就不动
        else if (actor.walk == 0 && grounded)
        {
            anim.SetFloat("Speed", actor.walk);
        }

        //如果是跳,就播放 跳的动画,并让actor中的jump失效
        anim.SetBool("Ground", grounded);

        //如果是互动,就播放 互动的动画,并让actor中的attack失效
        if (actor.attack == 1)
        {
            anim.SetTrigger("attack");
            soundEffects.clip = attackAudio;
            soundEffects.Play();
            if (gender == Network.m_Actor.gender)
            {
                isDoingAttack = 1;
            }
            actor.attack = -1;
        }

        //如果死了,就播放 死的动画
        if (actor.LifeState == -1)
        {
            ctrlState = CtrlState.NonPlayer;
            anim.SetBool("Dead", true);

            Invoke("ReStart", 2);
        }
    }
示例#12
0
 protected EnableEventArg EArg(CtrlState state, bool condition)
 {
     if (state == CtrlState.Enabled)
     {
         return(EventArg.Enable(true));
     }
     if (state == CtrlState.Disabled)
     {
         return(EventArg.Enable(false));
     }
     return(EventArg.Enable(condition));
 }
        /// <summary>
        /// Call this method to apply a vessel update using interpolation
        /// </summary>
        public FlightCtrlState GetInterpolatedValue()
        {
            if (!VesselCommon.IsSpectating && FlightGlobals.ActiveVessel && FlightGlobals.ActiveVessel.id == VesselId)
            {
                //Do not apply flight states updates to our OWN controlled vessel
                return(FlightGlobals.ActiveVessel.ctrlState);
            }

            if (InterpolationFinished && VesselFlightStateSystem.TargetFlightStateQueue.TryGetValue(VesselId, out var queue) && queue.TryDequeue(out var targetUpdate))
            {
                if (Target == null)
                {
                    //This is the case of first iteration
                    GameTimeStamp = targetUpdate.GameTimeStamp - TimeSpan.FromMilliseconds(SettingsSystem.ServerSettings.SecondaryVesselUpdatesMsInterval).TotalSeconds;

                    CopyFrom(FlightGlobals.FindVessel(VesselId));
                }
                else
                {
                    GameTimeStamp = Target.GameTimeStamp;
                    SubspaceId    = Target.SubspaceId;

                    CtrlState.CopyFrom(Target.CtrlState);
                }

                LerpPercentage = 0;

                if (Target != null)
                {
                    Target.CopyFrom(targetUpdate);
                    VesselFlightStateSystem.TargetFlightStateQueue[VesselId].Recycle(targetUpdate);
                }
                else
                {
                    Target = targetUpdate;
                }

                AdjustExtraInterpolationTimes();

                //UpdateProtoVesselValues();
            }

            if (Target == null)
            {
                return(InterpolatedCtrlState);
            }

            InterpolatedCtrlState.Lerp(CtrlState, Target.CtrlState, LerpPercentage);
            LerpPercentage += (float)(Time.fixedDeltaTime / InterpolationDuration);

            return(InterpolatedCtrlState);
        }
示例#14
0
        public unsafe CtrlState[] GetAllPortStateArray(ref byte portState)
        {
            CtrlState[] retVal = new CtrlState[8];
            byte        states = 0;

            GetAllPortState(ref states);

            for (int i = 0; i < 8; i++)
            {
                retVal[i] = ((states >> i) & 0x01) == 0x01 ? CtrlState.High : CtrlState.Low;
            }

            portState = (byte)states;

            return(retVal);
        }
示例#15
0
        public void SetPortState(uint port, CtrlState state)
        {
            if ((_ioModeMap & PortMask[port]) == PortMask[port])
            {
                throw new ArgumentException("Port must be in output state to be set.", "port");
            }

            if (state == CtrlState.High)
            {
                _ioStateMap |= PortMask[port];
            }
            else
            {
                _ioStateMap &= (byte)~PortMask[port];
            }

            SimpleIOClass.WritePort(_ioStateMap);
        }
        /// <summary>
        /// Here we apply the CURRENT vessel flight state to this update.
        /// </summary>
        private void ProcessRestart()
        {
            if (Target != null)
            {
                GameTimeStamp = Target.GameTimeStamp;
                SubspaceId    = Target.SubspaceId;

                CtrlState.CopyFrom(Target.CtrlState);
            }
            else
            {
                var vessel = FlightGlobals.fetch.LmpFindVessel(VesselId);
                if (vessel == null)
                {
                    return;
                }

                CtrlState.CopyFrom(vessel.ctrlState);
            }
        }
示例#17
0
    public void Play()
    {
        if (pd != null)
        {
            switch (state)
            {
            case CtrlState.None:
                if (pd.timeUpdateMode != DirectorUpdateMode.Manual)
                {
                    pd.timeUpdateMode = DirectorUpdateMode.Manual;
                }
                pd.Stop();
                pd.Play();
                state = CtrlState.Play;
                break;

            case CtrlState.Pause:
                state = CtrlState.Play;
                break;
            }
        }
    }
示例#18
0
        public CtrlState GetPortState(uint port)
        {
            CtrlState retVal = CtrlState.Floating;

            if ((_ioModeMap & PortMask[port]) != PortMask[port])
            {
                throw new ArgumentException("Port must be in input state to be read.", "port");
            }

            int stateVal = SimpleIOClass.ReadPortValue();

            if (stateVal == 0x8000)
            {
                throw new Exception("Error reading port values");
            }
            else
            {
                _ioStateMap = (byte)stateVal;
                retVal      = ((_ioStateMap & PortMask[port]) == PortMask[port]) ? CtrlState.High : CtrlState.Low;
            }

            return(retVal);
        }
示例#19
0
 // Update is called once per frame
 protected void Update()
 {
     if (state == CtrlState.Play && pd != null)
     {
         int updateTimes = CalcEvaluateTimes(Time.deltaTime);
         if (updateTimes < 1)
         {
             var curTime = (float)pd.time + Time.deltaTime;
             if (curTime >= duration)
             {
                 state   = CtrlState.Stop;
                 curTime = duration;
             }
             pd.time = curTime;
             pd.Evaluate();
         }
         else
         {
             for (int i = 0; i < updateTimes; i++)
             {
                 if (state != CtrlState.Play)
                 {
                     break;
                 }
                 var curTime = (float)pd.time + MinUpdateTime;
                 if (curTime >= duration)
                 {
                     state   = CtrlState.Stop;
                     curTime = duration;
                 }
                 pd.time = curTime;
                 pd.Evaluate();
             }
         }
     }
 }
示例#20
0
 //生命周期-------------------------------------------------------------------------
 //供 ctrlManager 调用
 public void StartLoad(Action finishCallback)
 {
     this.finishCallback = finishCallback;
     state = CtrlState.Loading;
     this.OnStartLoad();
 }
示例#21
0
 public Chase(CtrlState _ctrlstate, GameObject tmonster)
 {
     ctrlState     = _ctrlstate;
     this.tmonster = tmonster;
 }
示例#22
0
 public abstract void ToggleElements(CtrlState state);
示例#23
0
        /// <summary>
        /// Handles transition between controller-to-character parenting states
        /// </summary>
        /// <param name="fromState">initial state</param>
        /// <param name="toState">target state</param>
        /// <returns></returns>
        private CtrlState ChangeControlState(CtrlState fromState, CtrlState toState)
        {
            if (fromState == toState)
            {
                return(toState);
            }

            // Undo effects of the current state
            switch (fromState)
            {
            case CtrlState.None:
                break;

            case CtrlState.MaleControl:
                male_p_cf_bodybone.transform.parent = male.objTop.transform;
                break;

            case CtrlState.FemaleControl:
                if (SetParentMode.Value == ParentMode.AnimationOnly)
                {
                    femaleSpinePos.transform.parent = null;
                }
                else
                {
                    SetParentToController(femaleSpinePos, femaleBase, true);
                }
                break;

            case CtrlState.Following:
                if (SetParentMode.Value != ParentMode.PositionOnly)
                {
                    AddAnimSpeedController(obj_chaF_001);
                }
                if (SetParentMode.Value == ParentMode.AnimationOnly)
                {
                    femaleSpinePos.transform.parent = null;
                }
                male_p_cf_bodybone.transform.parent = male.objTop.transform;
                break;

            case CtrlState.Stationary:
                if (SetParentMode.Value != ParentMode.AnimationOnly)
                {
                    SetParentToController(femaleSpinePos, femaleBase, true);
                }
                if (SetParentMode.Value != ParentMode.PositionOnly)
                {
                    AddAnimSpeedController(obj_chaF_001);
                }
                break;
            }

            //Apply effects of the target state and update current state to target state
            switch (toState)
            {
            case CtrlState.None:
                return(CtrlState.None);

            case CtrlState.MaleControl:
                male_p_cf_bodybone.transform.parent = ParentSideController(oppositeSide: true).transform;
                return(CtrlState.MaleControl);

            case CtrlState.FemaleControl:
                SetParentToController(femaleSpinePos, femaleBase, false, notParentSide: true);
                return(CtrlState.FemaleControl);

            case CtrlState.Following:
                if (SetParentMode.Value == ParentMode.AnimationOnly)
                {
                    SetParentToController(femaleSpinePos, femaleBase, false);
                }
                if (obj_chaF_001.GetComponent <AnimSpeedController>() != null)
                {
                    UnityEngine.Object.Destroy(obj_chaF_001.GetComponent <AnimSpeedController>());
                }
                male_p_cf_bodybone.transform.parent = female_p_cf_bodybone.transform;
                return(CtrlState.Following);

            case CtrlState.Stationary:
                if (SetParentMode.Value != ParentMode.AnimationOnly)
                {
                    femaleSpinePos.transform.parent = null;
                }
                if (obj_chaF_001.GetComponent <AnimSpeedController>() != null)
                {
                    UnityEngine.Object.Destroy(obj_chaF_001.GetComponent <AnimSpeedController>());
                }
                return(CtrlState.Stationary);

            default:
                return(CtrlState.None);
            }
        }
示例#24
0
        private void ThreadPoolThreadProc(object state)
        {
            ICtrl     ctrlr    = (ICtrl)state;
            uint      port     = 0;
            CtrlMode  curMode  = CtrlMode.Output;
            CtrlState curState = CtrlState.High;

            for (uint i = 0; i < 8; i++)
            {
                ctrlr.SetPortMode(i, curMode);
            }

            while (true)
            {
                if (!stopShow.WaitOne(0, false))
                {
                    break;
                }

                ctrlr.SetAllPortState((byte)255);

                for (int j = 0; j < 8; j++)
                {
                    if (++port > 7)
                    {
                        port = 0;
                    }

                    ctrlr.SetPortState(port, curState);

                    curState = curState == CtrlState.High ? CtrlState.Low : CtrlState.High;

                    Thread.Sleep(demoDelay);
                }

                for (int k = 0; k < 3; k++)
                {
                    byte tempState = 0;
                    ctrlr.GetAllPortState(ref tempState);
                    tempState = (byte)~tempState;
                    ctrlr.SetAllPortState(tempState);

                    Thread.Sleep(demoDelay * 2);
                }

                for (int l = 0; l < 8; l++)
                {
                    if (--port > 7)
                    {
                        port = 7;             //port is a uint, so it will go high instead of negative
                    }
                    stopShow.WaitOne();

                    ctrlr.SetPortState(port, curState);

                    curState = curState == CtrlState.High ? CtrlState.Low : CtrlState.High;

                    Thread.Sleep(demoDelay);
                }

                for (int m = 0; m < 3; m++)
                {
                    byte tempState = 0;
                    ctrlr.GetAllPortState(ref tempState);
                    tempState = (byte)~tempState;
                    ctrlr.SetAllPortState(tempState);

                    Thread.Sleep(demoDelay * 2);
                }
            }
        }
示例#25
0
 internal void Inactive()
 {
     state = CtrlState.Inactive;
     this.OnInactive();
 }
示例#26
0
 protected EnableEventArg EArg(CtrlState state, bool condition)
 {
     if (state == CtrlState.Enabled) return EventArg.Enable(true);
     if (state == CtrlState.Disabled) return EventArg.Enable(false);
     return EventArg.Enable(condition);
 }
示例#27
0
 public Patrol(CtrlState _ctrlstate, GameObject tmonster)
 {
     ctrlState     = _ctrlstate;
     this.tmonster = tmonster;
 }
示例#28
0
 public void Active()
 {
     state = CtrlState.Active;
     this.OnActive();
 }
示例#29
0
 public void Init()
 {
     state = CtrlState.Inited;
     this.OnInit();
 }
示例#30
0
 // Start is called before the first frame update
 protected void Awake()
 {
     state    = CtrlState.None;
     pd       = GetComponent <PlayableDirector>();
     duration = (float)pd.duration - 0.01f;
 }
示例#31
0
    //public void OnTriggerEnter2D(Collider2D col)
    //{
    //    Debug.Log("123");
    //    if (col.tag == "Player")
    //    {
    //        Debug.Log("怪物碰到了主角");
    //    }
    //    else
    //    {
    //        Debug.Log("NULL");
    //    }
    //}

 

    void Start()
    {
        ctrlstate = new CtrlState();
        Patrol Monster = new Patrol(ctrlstate,this.gameObject);
        ctrlstate.SetEnemyState(Monster);
    }
示例#32
0
 public abstract void ToggleElements(CtrlState state);