Ejemplo n.º 1
0
 // Update is called once per frame
 void Update()
 {
     if (!GameState.isGameActive)
     {
         return;
     }
     timeLeft -= Time.deltaTime;
     if (timeLeft < 0)
     {
         if (repeat)
         {
             timeLeft = WaitTime;
             numRepeats++;
             if (numRepeats >= MaxRepeats && MaxRepeats > 0)
             {
                 enabled    = false;
                 numRepeats = 0;
             }
         }
         if (triggerEvent != null)
         {
             triggerEvent.Trigger();
         }
     }
 }
Ejemplo n.º 2
0
    void Update()
    {
        Vector2 cameraPoint = Camera.main.WorldToViewportPoint(transform.position).xy();

        if (Mathf.Abs(cameraPoint.x) < 1f && Mathf.Abs(cameraPoint.y) < 1f)
        {
            trigger.Trigger();
            enabled = false;
        }
    }
Ejemplo n.º 3
0
 bool ITrigger.Trigger(DateTime time, IJob job, int runnings)
 {
     if (job.Frequencies + 1 > 1)
     {
         this.expired = true;
         return(false);
     }
     else if (job.Frequencies + runnings + 1 > 1)
     {
         return(false);
     }
     if (this.subTrigger != null)
     {
         ITrigger trigger = (ITrigger)this.subTrigger;
         if (trigger.Expired)
         {
             this.expired = true;
             return(false);
         }
         bool ret = trigger.Trigger(time, this.subJob, 0);
         if (ret)
         {
             this.subJob.IncrementFrequency();
         }
         return(ret);
     }
     else
     {
         if (timeLimiter != null)
         {
             if (!timeLimiter.Arrived(time))
             {
                 return(false);
             }
             if (timeLimiter.Beyonded(time))
             {
                 this.expired = true;
                 return(false);
             }
             else
             {
                 return(true);
             }
         }
         else
         {
             return(true);
         }
     }
 }
Ejemplo n.º 4
0
 bool ITrigger.Trigger(DateTime time, int succeedCount, int runningCount)
 {
     if (succeedCount + 1 > 1)
     {
         this.expired = true;
         return(false);
     }
     else if (succeedCount + runningCount + 1 > 1)
     {
         return(false);
     }
     if (this.tryTrigger != null)
     {
         ITrigger trigger = (ITrigger)this.tryTrigger;
         if (trigger.Expired)
         {
             this.expired = true;
             return(false);
         }
         bool ret = trigger.Trigger(time, this.hasTried, 0);
         if (ret)
         {
             this.hasTried++;
         }
         return(ret);
     }
     else
     {
         if (timeLimiter != null)
         {
             if (timeLimiter.Unarrive(time))
             {
                 return(false);
             }
             if (timeLimiter.Beyonded(time))
             {
                 this.expired = true;
                 return(false);
             }
             else
             {
                 return(true);
             }
         }
         else
         {
             return(true);
         }
     }
 }
        private void Update()
        {
            if (PlayerUI.singleton.isPaused)
            {
                return;
            }

            dropPos = camTransform.position + camTransform.forward * 1.6f;

            Collider[] colliders = Physics.OverlapSphere(camTransform.position, reach);

            foreach (IDisplay interactable in FindObjectsOfType <MonoBehaviour>().OfType <IDisplay>())
            {
                interactable.Undisplay();
            }

            foreach (Collider col in colliders)
            {
                IDisplay display = col.transform.GetComponent <IDisplay>();
                if (display != null)
                {
                    display.Display();
                }
            }

            if (Input.GetKeyDown(KeyHandler.PickupKey))
            {
                RaycastHit _hitInfo;
                if (Physics.Raycast(camTransform.position, camTransform.forward, out _hitInfo, reach))
                {
                    IInteractable interactable = _hitInfo.transform.GetComponent <IInteractable>();
                    if (interactable != null)
                    {
                        interactable.Interact();
                    }
                }
            }
            else if (Input.GetKeyDown(KeyHandler.TriggerKey))
            {
                RaycastHit _hitInfo;
                if (Physics.Raycast(camTransform.position, camTransform.forward, out _hitInfo, reach))
                {
                    ITrigger interactable = _hitInfo.transform.GetComponent <ITrigger>();
                    if (interactable != null)
                    {
                        interactable.Trigger();
                    }
                }
            }
        }
Ejemplo n.º 6
0
 private void schedule(DateTime time, ITrigger trigger, JobProcess process)
 {
     if (trigger.Trigger(time, process.SucceedCount, process.RunningCount))
     {
         bool ret = true;
         foreach (IJob job in process.Jobs)
         {
             ret = ret && this.canRunning(job);
         }
         if (ret)
         {
             process.StartATask();
         }
     }
 }
Ejemplo n.º 7
0
        private void schedule(DateTime time, ITrigger trigger, IJob job)
        {
            int runnings = 0;
            ConcurrentBag <JobProcess> processBag = null;

            if (this.processDict.TryGetValue(job, out processBag))
            {
                foreach (JobProcess process in processBag)
                {
                    if (process.IsRunning)
                    {
                        runnings++;
                    }
                }
            }
            if (trigger.Trigger(time, job, runnings))
            {
                if (!passedNeedJobs(job))
                {
                    Console.WriteLine("作业{0}的先行作业没有成功地完全结束,本作业暂时无法调度。", job.Name);
                    return;
                }
                if (processBag == null)
                {
                    processBag = new ConcurrentBag <JobProcess>();
                    this.processDict.TryAdd(job, processBag);
                }

                if (processBag.Count < this.processNumPerJob)
                {
                    JobProcess process = new JobProcess(job);
                    processBag.Add(process);
                    process.Start();
                }
                else
                {
                    foreach (JobProcess process in processBag)
                    {
                        if (!process.IsRunning)
                        {
                            process.Start();
                            break;
                        }
                    }
                }
            }
        }
Ejemplo n.º 8
0
    new void UpdateHit(float dT)
    {
        pups.Clear();
        hitCount = Physics2D.BoxCastNonAlloc(transform.position, box.size, 0, velocity, RaycastHits, Mathf.Max(raylength, velocity.magnitude * dT), HitLayers);
        for (int i = 0; i < hitCount; i++)
        {
            hit = RaycastHits[i];
            if (hit.transform.IsChildOf(transform))
            {
                continue;
            }
            ITrigger tri = hit.transform.GetComponent <ITrigger>();
            if (tri != null)
            {
                tri.Trigger(transform);
            }
            IDamage dam = hit.transform.GetComponent <IDamage>();
            if (dam != null)
            {
                // maybe only damage other if charging weapon or has active powerup?
                if (ContactDamage != null)
                {
                    Damage dmg = Instantiate(ContactDamage);
                    dmg.instigator   = this;
                    dmg.damageSource = transform;
                    dmg.point        = hit.point;
                    dam.TakeDamage(dmg);
                }
            }
        }

        pups.Clear();
        hitCount = Physics2D.CircleCastNonAlloc(transform.position, selectRange, Vector3.zero, RaycastHits, 0, Global.WorldSelectableLayers);
        for (int i = 0; i < hitCount; i++)
        {
            hit = RaycastHits[i];
            IWorldSelectable pup = hit.transform.GetComponent <IWorldSelectable>();
            if (pup != null)
            {
                pups.Add((Component)pup);

                /*if( !highlightedPickups.Contains( pup ) )
                 * {
                 * pup.Highlight();
                 * highlightedPickups.Add( pup );
                 * }*/
            }
        }
        //WorldSelectable closest = (WorldSelectable)FindClosest( transform.position, pups.ToArray() );
        IWorldSelectable closest = (IWorldSelectable)Util.FindSmallestAngle(transform.position, shoot, pups.ToArray());

        if (closest == null)
        {
            if (closestISelect != null)
            {
                closestISelect.Unhighlight();
                closestISelect = null;
            }
            if (WorldSelection != null)
            {
                WorldSelection.Unselect();
                WorldSelection = null;
            }
        }
        else if (closest != closestISelect)
        {
            if (closestISelect != null)
            {
                closestISelect.Unhighlight();
            }
            closestISelect = closest;
            closestISelect.Highlight();
        }

        /*highlightedPickupsRemove.Clear();
         * foreach( var pup in highlightedPickups )
         * if( !pups.Contains( pup ) )
         * {
         *  pup.Unhighlight();
         *  highlightedPickupsRemove.Add( pup );
         * }
         * foreach( var pup in highlightedPickupsRemove )
         * highlightedPickups.Remove( pup );
         */
    }