コード例 #1
0
 void Awake()
 {
     baseObject                   = GetComponent <DungeonObject>();
     tickable                     = GetComponent <Tickable>();
     baseObject.onMove           += OnMove;
     baseObject.onPickedUpObject += OnPickedUpObject;
 }
コード例 #2
0
 public void DeregisterEntity(Tickable tickable)
 {
     lock (mutex)
     {
         Tickables.Remove(tickable);
     }
 }
コード例 #3
0
 public void RegisterEntity(Tickable tickable)
 {
     lock (mutex)
     {
         Tickables.Add(tickable);
     }
 }
コード例 #4
0
ファイル: TimerMgr.cs プロジェクト: wyyayy/ARPainting
 /// Remove a manual tickable object.
 /// A manual tickable object must be add/remove by AddTickable/RemoveTickable.
 public void RemoveTickable(Tickable pTickable)
 {
     pTickable.Stop();
     pTickable.DecRef();
     _nManualTickersCount--;
     Debugger.Assert(_nManualTickersCount >= 0);
 }
コード例 #5
0
    //public int ID { get { return tickable.ID; } }
    void Start()
    {
        tickable = new Tickable(Name);

        if (GameStateManager.Instance != null) {
            tickable.ID = GameStateManager.Instance.Tickables.Count;
            GameStateManager.Instance.Tickables.Add (tickable);
        }
    }
コード例 #6
0
ファイル: TimeMaster.cs プロジェクト: code-11/RTS
    private void evalSubscribed()
    {
        for (int i = 0; i < subscribed.Count; i += 1)
        {
            Tickable subscriber = subscribed [i];
            subscriber.discreteUpdate();
        }

        /*foreach(Tickable subscriber in subscribed ){
         *      subscriber.discreteUpdate();
         * }*/
    }
コード例 #7
0
ファイル: TimerMgr.cs プロジェクト: wyyayy/ARPainting
    /// Internal publics
    public void _PlayTickable(Tickable tickable)
    {
        // push tween into list.
        if (!tickable._InQueue)
        {
            Debugger.Assert(!_arrInQueueTickers.Contains(tickable));

            /// if (__bInUpdateing) __bNewAddedWhenUpdate = true;

            tickable._InQueue = true;
            _arrInQueueTickers.Add(tickable);
        }

        Debugger.ConditionalAssert(tickable._InQueue, _arrInQueueTickers.Contains(tickable));
    }
コード例 #8
0
ファイル: TimerMgr.cs プロジェクト: wyyayy/ARPainting
    ///------------ Implementation ------------------
    private void _updateTickables(float fTime, float fRealTime)
    {
        int iLastDeadIndex = -1;
        int nCount         = _arrInQueueTickers.Count;

        Tickable[] arrTickers = _arrInQueueTickers._Buffer;
        __AliveTickableCount = 0;

        for (int i = 0; i < nCount; ++i)
        {
            Tickable pTicker = arrTickers[i];

            if (pTicker._IsDead)
            {
                iLastDeadIndex = i;
                continue;
            }

            __AliveTickableCount++;

            if (pTicker.status == TickerStatus.PUASED)
            {
                continue;
            }

            pTicker._Tick(pTicker._Scalable ? fTime : fRealTime);
        }

        if (iLastDeadIndex != -1)
        {
            Tickable lastDeadTicker = _arrInQueueTickers[iLastDeadIndex];

            lastDeadTicker._InQueue = false;

            if (iLastDeadIndex != _arrInQueueTickers.Count - 1)
            {
                _arrInQueueTickers[iLastDeadIndex] = _arrInQueueTickers.Pop();
            }
            else
            {
                _arrInQueueTickers.Pop();
            }
        }
    }
コード例 #9
0
ファイル: TimeManager.cs プロジェクト: noblewhale/UDHGameJam
    IEnumerator Tick()
    {
        tickableIndex = tickableObjects.Count - 1;
        while (true)
        {
            bool isDone = true;
            if (currentAction != null)
            {
                if (!isInterrupted)
                {
                    isDone = currentAction.ContinueAction();
                    if (!isDone)
                    {
                        yield return(new WaitForEndOfFrame());

                        continue;
                    }
                }
                if (isInterrupted || isDone)
                {
                    //bool isOnCamera =
                    //    currentAction.owner.transform.position.x > mapCamera.transform.position.x - mapCamera.orthographicSize * mapCamera.aspect &&
                    //    currentAction.owner.transform.position.x < mapCamera.transform.position.x + mapCamera.orthographicSize * mapCamera.aspect &&
                    //    currentAction.owner.transform.position.y > mapCamera.transform.position.y - mapCamera.orthographicSize &&
                    //    currentAction.owner.transform.position.y < mapCamera.transform.position.y + mapCamera.orthographicSize;
                    //if (!isInterrupted && currentAction.owner.tile.isInView && currentAction.owner.tile.isLit && isOnCamera)
                    //{
                    //    bool isNextTickablePlayer = tickableObjects[tickableIndex] == Player.instance.identity.GetComponent<Tickable>();
                    //    isWaitingBetweenActions = !isPlayerAction && !isNextTickablePlayer;
                    //    startWaitBetweenActionsTime = Time.time;
                    //}
                    currentAction.FinishAction();
                    currentAction  = null;
                    isPlayerAction = false;
                }
            }

            //if (isWaitingBetweenActions)
            //{
            //    if (isInterrupted)
            //    {
            //        isWaitingBetweenActions = false;
            //    }
            //    else
            //    {
            //        if (Time.time - startWaitBetweenActionsTime < timeBetweenActions)
            //        {
            //            yield return new WaitForEndOfFrame();
            //            continue;
            //        }
            //        else
            //        {
            //            isWaitingBetweenActions = false;
            //        }
            //    }
            //}

            if (isDone || isInterrupted)
            {
                for (; tickableIndex >= 0; tickableIndex--)
                {
                    var ob = tickableObjects[tickableIndex];
                    if (ob.markedForRemoval)
                    {
                        continue;
                    }
                    if (time >= ob.nextActionTime)
                    {
                        if (Player.instance.identity.GetComponent <Tickable>() == ob)
                        {
                            if (Player.instance.hasReceivedInput)
                            {
                                isPlayerAction = true;
                                isInterrupted  = false;
                                Player.instance.hasReceivedInput        = false;
                                Player.instance.isWaitingForPlayerInput = false;
                            }
                            else
                            {
                                Player.instance.isWaitingForPlayerInput = true;
                                currentAction = null;
                                break;
                            }
                        }
                        ulong actionDuration    = 1;
                        bool  finishImmediately = ob.StartNewAction(out actionDuration);
                        ob.nextActionTime = time + actionDuration;
                        bool wasPlayerAction = isPlayerAction;
                        bool isOnCamera      =
                            ob.owner.transform.position.x > mapCamera.transform.position.x - mapCamera.orthographicSize * mapCamera.aspect &&
                            ob.owner.transform.position.x <mapCamera.transform.position.x + mapCamera.orthographicSize *mapCamera.aspect &&
                                                           ob.owner.transform.position.y> mapCamera.transform.position.y - mapCamera.orthographicSize &&
                            ob.owner.transform.position.y < mapCamera.transform.position.y + mapCamera.orthographicSize;
                        if (!isInterrupted && ob.owner.tile.isInView && ob.owner.tile.isLit && isOnCamera)
                        {
                            int nextTickableIndex = tickableIndex - 1;
                            if (nextTickableIndex <= 0)
                            {
                                nextTickableIndex = tickableObjects.Count - 1;
                            }
                            bool isNextTickablePlayer = tickableObjects[nextTickableIndex] == Player.instance.identity.GetComponent <Tickable>();
                            isWaitingBetweenActions     = !wasPlayerAction && !isNextTickablePlayer && !finishImmediately;
                            startWaitBetweenActionsTime = Time.time;
                            if (isWaitingBetweenActions)
                            {
                                yield return(new WaitForSeconds(timeBetweenActions));
                            }
                            //tickableIndex--;
                            //break;
                        }
                        if (finishImmediately || !ob.owner.tile.isInView || !ob.owner.tile.isLit || isInterrupted || !isOnCamera)
                        {
                            ob.FinishAction();
                            currentAction  = null;
                            isPlayerAction = false;
                            //tickableIndex--;
                        }
                        else
                        {
                            currentAction = ob;
                        }

                        if (isInterrupted && ob == interruptingTickable)
                        {
                            isInterrupted        = false;
                            interruptingTickable = null;
                        }

                        if (currentAction != null)
                        {
                            tickableIndex--;
                            break;
                        }
                    }
                }

                if (tickableIndex == -1)
                {
                    for (int ri = tickableObjects.Count - 1; ri >= 0; ri--)
                    {
                        var ob = tickableObjects[ri];
                        if (ob.markedForRemoval)
                        {
                            tickableObjects.RemoveAt(ri);
                        }
                    }

                    time++;
                    tickableIndex = tickableObjects.Count - 1;
                }
            }

            if (currentAction == null)
            {
                yield return(new WaitForEndOfFrame());
            }
        }
    }
コード例 #10
0
ファイル: TimeManager.cs プロジェクト: noblewhale/UDHGameJam
 public void Interrupt(Tickable interruptingTickable)
 {
     this.interruptingTickable = interruptingTickable;
     isInterrupted             = true;
 }
コード例 #11
0
 /// <summary>
 /// Unregister an ticked element.
 /// Used because it's impossible to delete an array element during array iteration.
 /// </summary>
 /// <param name="child">Element to unregister</param>
 public void clockUnregister(Tickable child)
 {
     this.clocksOld.Add(child);
 }
コード例 #12
0
 /// <summary>
 /// Register an element to be ticked every 1/30 sec
 /// </summary>
 /// <param name="child">Element to register</param>
 public void clockRegister(Tickable child)
 {
     this.clocksNew.Add(child);
 }
コード例 #13
0
ファイル: TimeMaster.cs プロジェクト: code-11/RTS
 public void unsubscribe(Tickable subscriber)
 {
     subscribed.Remove(subscriber);
 }
コード例 #14
0
ファイル: TimeMaster.cs プロジェクト: code-11/RTS
 public void subscribe(Tickable subscriber)
 {
     subscribed.Add(subscriber);
 }