コード例 #1
0
 public void ExecuteValueChanged()
 {
     if (field != null && element != null)                                                         //start method was executed
     {
         StartCoroutine(FlexPanel.DelayAction(0f, () => field.onValueChanged.Invoke(field.text))); //sic! without a coroutine Viewport`s RectTransform.rect is not updated in time.
     }
 }
コード例 #2
0
    public void Exit()
    {
        deathCanvas.SetParent(null);

        var canvases = GetComponentsInChildren <Canvas>();

        foreach (var item in canvases)
        {
            item.gameObject.SetActive(false);
        }


        deathCanvas.gameObject.SetActive(true);
        var   b         = deathCanvas.gameObject.AddComponent <DummyBehaviour>();
        float startTime = Time.time;

        OnApplicationQuit();
        b.StartCoroutine(FlexPanel.DelayActionWhile(() =>
        {
            UnityEngine.SceneManagement.SceneManager.LoadScene(sceneMenu);
        },
                                                    () =>
        {
            return(Time.time < startTime + 2f || !Input.anyKey);
        }));
    }
コード例 #3
0
 void ISelectHandler.OnSelect(BaseEventData eventData)
 {
     StartCoroutine(FlexPanel.DelayAction(0f, () => {
         field.caretPosition = field.selectionFocusPosition = field.selectionAnchorPosition = lastCaretPosition;
     }));
     selected         = true;
     field.caretColor = caretColor;
     OnSelectField.Invoke();
 }
コード例 #4
0
    protected void Start()
    {
        tank   = GetComponent <Tank>();
        logger = userLogger;
        tank.StartScripting(logger);
        StaticStart();

        StartCoroutine(FlexPanel.DelayAction(0.1f, FillInScriptTemplate));
    }
コード例 #5
0
ファイル: Tank.cs プロジェクト: OMOH98/Salient
    private void ApplyFire()
    {
        heat -= stats.coolingRate * Time.fixedDeltaTime;
        if (heat < 0f)
        {
            heat = 0f;
        }

        if (heat > 1f || actions.fireShots <= 0f || Time.time < nextTimeToFire)
        {
            return;
        }

        actions.fireShots--;
        nextTimeToFire = Time.time + stats.firePeriod;
        heat          += stats.heatPerShot;
        if (heat >= 1f)
        {
            heat += stats.overheatFine;
        }

        if (muzzleFlash.isPlaying)
        {
            muzzleFlash.Stop();
        }
        muzzleFlash.Play();

        RaycastHit rhi;
        Ray        ray = new Ray(muzzleFlash.transform.position, muzzleFlash.transform.forward);

        if (Physics.Raycast(ray, out rhi, float.PositiveInfinity, Physics.DefaultRaycastLayers, QueryTriggerInteraction.Ignore))
        {
            var impact = Instantiate(impactPrefab);
            impact.transform.SetPositionAndRotation(rhi.point, muzzleFlash.transform.rotation);
            var ips = impact.GetComponent <ParticleSystem>();
            impacts.Add(ips);
            StartCoroutine(FlexPanel.DelayActionWhile(() =>
            {
                impacts.Remove(ips);
                Destroy(impact);
            }, () =>
            {
                return(ips.isPaused || ips.isPlaying);
            }));

            var hc = rhi.collider.gameObject.GetComponent <HealthCare>();
            if (hc != null)
            {
                var d = new Damage()
                {
                    ammount = stats.damage.ammount, direction = muzzleFlash.transform.forward
                };
                hc.ReceiveDamage(d);
            }
        }
    }
コード例 #6
0
 private void SceneManager_activeSceneChanged(Scene arg0, Scene arg1)
 {
     StartCoroutine(FlexPanel.DelayAction(0.05f, () =>
     {
         var spawners = (from s in arg1.GetRootGameObjects()
                         where s.GetComponent <TankSpawner>() != null
                         select s.GetComponent <TankSpawner>()).ToArray();
         if (spawners.Length > 0)
         {
             spawners[0].SpawnFromBattle(battle);
         }
         Destroy(gameObject);
     }));
     SceneManager.activeSceneChanged -= SceneManager_activeSceneChanged;
 }
コード例 #7
0
ファイル: TankSpawner.cs プロジェクト: OMOH98/Salient
    public GameObject Spawn(int side, string code = "")
    {
        var tank = Instantiate(tankPrefab);

        tank.transform.SetParent(null);
        var point = spawnpoints.Find((p) => { return(p.sideId == side); });

        if (point == null)
        {
            point = spawnpoints[0];
        }

        var rnd = Random.insideUnitCircle * point.radius;

        tank.transform.SetPositionAndRotation(point.center.position + new Vector3(rnd.x, 0f, rnd.y), point.center.rotation);
        var rnds = tank.GetComponentsInChildren <MeshRenderer>();

        foreach (var item in rnds)
        {
            List <Material> lst = new List <Material>();
            for (int i = 0; i < item.materials.Length; i++)
            {
                lst.Add(point.sideMaterial);
            }
            item.materials = lst.ToArray();
        }

        var tankScript = tank.GetComponent <Tank>();

        tankScript.sideIdentifier = side;
        if (string.IsNullOrEmpty(code))
        {
            tankScript.code = point.defaultCode;
        }
        else
        {
            tankScript.code = code;
        }

        if (!timeFlows)
        {
            tankScript.StartCoroutine(FlexPanel.DelayAction(0.2f, tankScript.Pause));
        }

        centres[point].group.Add(tank);

        return(tank);
    }
コード例 #8
0
    // Use this for initialization
    void Start()
    {
        element = gameObject.GetComponent <LayoutElement>();
        if (element == null)
        {
            element = gameObject.AddComponent <LayoutElement>();
        }

        field = GetComponent <InputField>();
        int prevLength = field.text.Length;
        int maxWidth = 0, c = 0, linesCount = 1;
        int maxAdvance = 0;

        foreach (var inf in field.textComponent.font.characterInfo)
        {
            if (inf.advance > maxAdvance)
            {
                maxAdvance = inf.advance;
            }
        }
        RectTransform viewportRT = field.transform.parent.parent.GetComponent <RectTransform>();

        field.onValueChanged.AddListener((strParam) =>
        {
            var s            = field.text; //just in case
            var editDistance = System.Math.Abs(s.Length - prevLength);

            if (s.Length == 0)
            {
                maxWidth   = c = 0;
                linesCount = 1;
            }
            else if (editDistance > 1 || editDistance == 0)
            {
                if (editDistance > 3)
                {
                    field.text = ClearCR(field.text);
                    s          = field.text;
                }
                //full check
                maxWidth   = c = 0;
                linesCount = 1;
                for (int i = 0; i < s.Length; i++, c++)
                {
                    if (s[i] == '\n')
                    {
                        if (c > maxWidth)
                        {
                            maxWidth = c;
                        }
                        c = 0;
                        linesCount++;
                    }
                }
            }
            else if (field.caretPosition > 0)
            {
                //last symbol check

                var chr = s[field.caretPosition - 1];
                if (chr == '\n')
                {
                    linesCount++;
                }
                c = 1;
                for (int i = field.caretPosition - 1; i >= 0; i--, c++)
                {
                    if (s[i] == '\n')
                    {
                        break;
                    }
                }
                if (maxWidth < c)
                {
                    maxWidth = c;
                }
            }
            prevLength              = field.text.Length;
            element.preferredWidth  = System.Math.Max(maxAdvance * maxWidth + 20 + 2 * padding, viewportRT.rect.width);
            element.preferredHeight = Mathf.Max(1.2f * field.textComponent.fontSize * (linesCount + 2) + 2 * padding, viewportRT.rect.height);
        });
        StartCoroutine(FlexPanel.DelayAction(0f, ExecuteValueChanged));
    }
コード例 #9
0
 void IFlexPanel.SetIsHidden(UIElement child, bool value)
 {
     FlexPanel.SetIsHidden(child, value);
 }
コード例 #10
0
 bool IFlexPanel.GetIsHidden(UIElement child)
 {
     return(FlexPanel.GetIsHidden(child));
 }