void Update()
    {
        forbidActionForSeconds -= Time.deltaTime;
        timer -= Time.deltaTime;
        if (timer < 0)
        {
            timer = interval;
            Fire();
        }

        foreach (Transform t in bucket)
        {
            if (t.GetComponent <Collider>())
            {
                if (t.GetComponent <Rigidbody>())
                {
                    if (!t.GetComponent <Rigidbody>().isKinematic)
                    {
                        if (SMW_GF.inst.ColliderWasNumber(t.GetComponent <Collider>()))
                        {
                            t.gameObject.GetComponent <Rigidbody>().velocity = -transform.right * fireVelocity;
                        }
                    }
                    NumberInfo ni = t.GetComponent <NumberInfo>();
                    if ((ni.fraction.numerator > 0 && faceLeft == true) ||
                        (ni.fraction.numerator < 0 && faceLeft == false))
                    {
                        t.parent = null;                               // drop numbers of the wrong sign
//							ni.neverEats=true; // don't let this number interfere with the number line flow
                    }
                }
            }
        }
    }
示例#2
0
    public GameObject MakeIntoRocket(GameObject rocket)
    {
        TimedObjectDestructor tod = rocket.AddComponent <TimedObjectDestructor>();

        tod.autoDestruct = false;
        tod.DestroyNow(10);         // rockets die out after 10 secodns.

        rocket.transform.parent = null;
        rocket.GetComponent <Collider>().enabled = true;
        // Create the rocket.


        rocket.GetComponent <Rigidbody>().isKinematic            = false; // Why is this true by default?!
        rocket.GetComponent <Rigidbody>().useGravity             = false;
        rocket.GetComponent <Rigidbody>().drag                   = 0.01f;
        rocket.GetComponent <Rigidbody>().angularDrag            = 0.01f;
        rocket.GetComponent <Rigidbody>().collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic;


        NumberInfo ni = rocket.GetComponent <NumberInfo>();

        if (!ni.gameObject.GetComponent <DoesExplodeOnImpact>())
        {
            ni.gameObject.AddComponent <DoesExplodeOnImpact>();
        }
        //		// commented Debug.Log ("rocket created, value;"+rocket.GetComponent<NumberInfo>().fraction);
        return(rocket);
    }
示例#3
0
        public LotteryNumberAnalyzer(IList <LotteryData> lotteryDataPackage, NumberInfo numberInfo)
        {
            _lotteryDataPackage = lotteryDataPackage;
            _numberInfo         = numberInfo;

            InitHistoryDatas();
        }
示例#4
0
    IEnumerator NumberGlowRedAndDie(NumberInfo ni)
    {
        float           glowTime = Random.Range(1.5f, 2f);
        float           t        = 0;
        float           redSpeed = 1;
        List <Renderer> rs       = new List <Renderer>();

        foreach (Renderer rr in ni.GetComponentsInChildren <Renderer>())
        {
            if (rr.material.HasProperty("_Color"))
            {
                rs.Add(rr);
            }
        }
        while (t < glowTime)
        {
            t += Time.deltaTime;
            yield return(new WaitForSeconds(Time.deltaTime));

            foreach (Renderer r in rs)
            {
                if (r)
                {
                    r.material.color = Color.Lerp(r.material.color, Color.red, Time.deltaTime * redSpeed);
                }
            }
        }
//		if (ni) ni.gameObject.AddComponent<ShrinkAndDisappear>();
//		Destroy (ni.gameObject);
    }
    public override void SetProperties(SimpleJSON.JSONClass N)
    {
        base.SetProperties(N);
        NumberInfo ni = GetComponentInChildren <NumberInfo>();

        if (N.GetKeys().Contains(Fraction.fractionKey))
        {
            if (ni)
            {
                ni.SetNumber(JsonUtil.ConvertJsonToFraction(Fraction.fractionKey, N));
            }
            else
            {
                Debug.Log("ERROR: no number in this flower!:" + name);
            }
        }
        else
        {
            if (ni)
            {
                NumberManager.inst.DestroyOrPool(ni);
//				Destroy(ni.gameObject); // this flower shouldn't exist, but was included with the prefab .. so we destroy it after placement because json says it shouldn't have a numberinfo
            }
            else
            {
                Debug.Log("ERROR: no number in this flower!:" + name);
            }
        }
    }
    public override void Update()
    {
        if (LevelBuilder.inst.levelBuilderIsShowing)
        {
            return;                                                  // transform.root.GetComponent<LevelMachineCauldronGroup>().puzzleFrozen) return;
        }
        if (GenerateReady())
        {
            GenerateNumber(new Fraction(index, 1));
            NumberInfo ni = dripNumber.GetComponent <NumberInfo>();
            ni.greaterThanCombine               = 1;
            ni.lessThanCombine                  = 0; // no combinations!
            ni.childMeshRenderer.material       = Utils.FadeMaterial();
            ni.childMeshRenderer.material.color = new Color(1, 1, 1, 0.5f);

            dripNumber.AddComponent <CauldronNumber>();

            currentNumber = dripNumber;
        }
        if (dripNumber != null)
        {
            DripFX();
        }
        genTimer2 -= Time.deltaTime;
    }
示例#7
0
 public override void Clear()
 {
     base.Clear();
     m_textBox = null;
     m_info = null;
     m_isValidNumber = false;
 }
    public void Init(NumberInfo n)
    {
        ni           = n;
        ni.growTimer = 0;
        ni.growing   = true;
//		ni.baseScale = 0.5f; //childMeshRenderer.transform.localScale.x;
    }
    public void OnReceivedNumber(Collider other)
    {
        if (finished)
        {
            // commented Debug.Log ("finisheD");
            return;
        }
        if (recTimer > 0)
        {
//			// commented Debug.Log ("rectimer");
            return;
        }

        ResourceNumber rn = other.GetComponent <ResourceNumber>();

        if (rn)
        {
            recTimer = 1f;

            NumberInfo ni = other.GetComponent <NumberInfo>();
            totalChargeCollected = Fraction.Add(ni.fraction, totalChargeCollected);

            charge.Add(other.gameObject);
            GrabNewNumber(other.gameObject, ni);
            if (Fraction.AbsGreater(totalChargeCollected, maxCharge))
            {
                StartCoroutine(OverfillAndEmpty());
//				EmptyBattery();
            }
            else
            {
            }
        }
    }
    public override bool IsValidAmmo(GameObject o)
    {
        if (o.GetComponent <ResourceNumber>())
        {
            return(false);
        }
        NumberInfo ni = o.GetComponent <NumberInfo>();

        if (!ni)
        {
            return(false);
        }
        bool flag = false;

        if (ni.fraction.numerator > 10 || ni.fraction.numerator < -10)
        {
            PlayerNowMessage.inst.Display("That number is too big for the Wave gadget.", transform.position);
        }
        else if (ni.fraction.denominator != 1)
        {
            PlayerNowMessage.inst.Display("The Wave gadget only collects integers.");
        }
        else
        {
            flag = true;
        }
        if (!base.IsValidAmmo(o))
        {
            flag = false;
        }
        return(flag);
    }
 public override void ModifyAmmo(NumberModifier.ModifyOperation fn)
 {
     if (numberHeld)
     {
         NumberInfo ni = numberHeld.GetComponent <NumberInfo>();
         if (!ni)
         {
             return;
         }
         Fraction fracc = fn(ni.fraction);
         // commented Debug.Log("set ni:"+fracc);
         ni.SetNumber(fracc);
         MonsterAIRevertNumber mairn = ni.GetComponent <MonsterAIRevertNumber>();
         if (mairn)
         {
             mairn.SetNumber(ni.fraction);
         }
         if (fracc.numerator == 0)
         {
             DropAmmo(true);
             NullifyAmmo();
         }
         UpdateAmmoGraphics(true);
         // commented Debug.Log("modified! ");
     }
     //		RecalcInfoText();
 }
    void AttemptToFireNumber(NumberInfo fireNumber)
    {
        grabbingNumber = null;
        if (fireNumber.fraction.IsMultipleOf(cannonFrac))          //.numerator % cannonNumber == 0 && fireNumber.fraction.denominator == 1){
        // success! Fire the number.
        {
            GameObject     rocket = SMW_GF.inst.FireRocketFromTo(firePos.position, firePos.forward, fireNumber.fraction, 1, 18, 200, null, true);
            ScaleUpAndStop sup    = rocket.AddComponent <ScaleUpAndStop>();
            sup.stopScale = Vector3.one * 3.5f;
            EffectsManager.inst.CreateSmokePuffBig(firePos.position, firePos.forward);
            Destroy(fireNumber.gameObject);
        }
        else
        {
            if (!ignoredNumbers.Contains(fireNumber))
            {
                ignoredNumbers.Add(fireNumber);
                checkIgnoredTimer = Random.Range(1.5f, 2.5f);
            }
            fireNumber.GetComponent <Rigidbody>().isKinematic = false;
            fireNumber.GetComponent <Collider>().enabled      = true;
            fireNumber.transform.position = startPos.position;
            float fireForce = 3000f;

            fireNumber.GetComponent <Rigidbody>().AddForce((-startPos.forward + startPos.right * 1.5f) * fireForce);          // reject number off and to the right. This prevents it rejecing into the next incoming number
            AudioManager.inst.PlayWrongAnswerError(firePos.position, 1, 1);
            AudioManager.inst.PlayDepressingCannonSound(firePos.position, 1f);
            EffectsManager.inst.CreateSmokePuffBig(startPos.position, -startPos.forward);
            if (Vector3.Distance(Player.inst.transform.position, transform.position) < 20f)
            {
                PlayerNowMessage.inst.Display("This cannon can only use multiples of 10, like 10, 20, or 30.");
            }
        }
    }
示例#13
0
    public override bool IsValidAmmo(GameObject o)
    {
        // an alternate different system compared to CanCollectNumber, probably more apt
        NumberInfo ni = o.GetComponent <NumberInfo>();

        if (!ni)
        {
            return(false);
        }
        if (o.GetComponent <ResourceNumber>())
        {
            return(false);
        }

        bool flag = (ni.fraction.numerator <10 && ni.fraction.numerator> -10);

        if (!flag)
        {
            PlayerNowMessage.inst.Display("That number is too big for the Bow gadget.", transform.position);
            return(flag);
        }
        flag = ni.fraction.denominator == 1;
        if (!flag)
        {
            PlayerNowMessage.inst.Display("The Bow gadget only collects integers.");
        }
        return(flag);
    }
    public void OnTriggerEnter(Collider other)
    {
        ClearDeadGhosts();
        if (ghosts.Contains(other))
        {
            return;
        }

        if (SMW_GF.inst.ColliderWasNumber(other))
        {
            NumberInfo ni = other.GetComponentInChildren <NumberInfo>();
            float      x  = Mathf.Sqrt((float)ni.fraction.numerator / (float)ni.fraction.denominator);
            // commented Debug.Log ("float of " + ni.fraction.numerator / ni.fraction.denominator + " was " +x);
            // commented Debug.Log ("round == " +Mathf.Round(x));
            if (Mathf.Round(x) == x)
            {
                FreezeNumber(ni, x);                       // float. Grabbable, free
                ni.gameObject.AddComponent <CubeWarmer>(); // It becomes a number fire.
            }
            else
            {
                // commented Debug.Log (" x was : " +x);
                TurnNumberIntoGhost(ni);
            }
        }
    }
    public void Collect(GameObject o, bool muted = false)
    {
//		Debug.Log("Adding "+o+" to slot "+this.name);
        // was AddItemToSlot
        // Note that ITEM is the 2D item we see in inventory
        // and ITEM3D is the item that still exists in the game world but is now deactivated.
        PickUppableObject pip = o.GetComponent <PickUppableObject>();

        pip.OnInventoryCollect(muted);
        NumberInfo ni            = o.GetComponent <NumberInfo>();
        GameObject inventoryItem = (GameObject)Instantiate(Inventory.inst.itemPrefab);

        // Removing hand
        if (ni)
        {
            // Make the inventory icon for NumberInfos only.
            inventoryItem.GetComponent <InventoryItem>().SetUpDigits(ni);
        }
        else if (pip.inventoryIcon != null)
        {
            inventoryItem.GetComponent <Image>().sprite = pip.inventoryIcon;
            if (pip.useColor == true)
            {
                inventoryItem.GetComponent <Image>().color = pip.inventoryIconColor;
            }
        }
        inventoryItem.transform.SetParent(transform, false);        //parent = emptySlot.transform;
        inventoryItem.GetComponent <InventoryItem>().item3d = o;
        foreach (IMyPickupable im in o.GetComponents(typeof(IMyPickupable)))
        {
            im.OnPlayerPickup();
        }
        o.SetActive(false);
    }
    void GrabNewNumber(GameObject other, NumberInfo ni)
    {
//		ni.SetStability(true);
//		ni.dying=false;
//		ni.bNeedsWobble=false;

        other.transform.localScale = Vector3.one;
        // Make it non-numbery
        Destroy(other.GetComponent <Collider>());
        Destroy(other.GetComponent <Rigidbody>());
        other.layer = 0;
        EnemyBrick eb = other.GetComponent <EnemyBrick>();

        if (eb)
        {
            Destroy(eb);
        }


        // Move new number
        other.transform.position = inputTransform.position;
        other.transform.rotation = inputTransform.rotation;
        SMW_GF.inst.MoveObjTo(other, inputTransform.position + inputTransform.forward * 2f, 1, false, .9f);

        StartCoroutine(PostGrabNumber(other));

        AudioManager.inst.PlayCartoonEat(transform.position, 1);
    }
示例#17
0
    public void CollectNumberRight(GameObject o)
    {
        if (eating || !canAcceptNumbers || !CanCollectNumber(o))
        {
            return;
        }
        if (numberRight == null)
        {
            numberRight = null;                              // for missing objects.. ugh
        }
        if (numberRight)
        {
            return;
        }
        NumberInfo ni = o.GetComponent <NumberInfo>();

        if (ni)
        {
            if (ni.fraction.denominator != 1 || ni.fraction.numerator < 0)
            {
                return;                                                                        // pos integers only
            }
            SetNumberRight(ni);
        }
        if (numberRight && numberLeft)
        {
            EatNumbers();
        }
    }
示例#18
0
    override public void GadgetLateUpdate()
    {
        fireTimeout -= Time.deltaTime;

        if (holdingMouse)
        {
            if (mode == GadgetFactorSwapperMode.Split)
            {
                targetA = CheckLaser(r1, gadgetGraphics.transform.position + (GetAimVector()) * range);
                if (targetA)
                {
                    if (!targetA_resultA || !targetA_resultB)
                    {
                        CreateTargetResultsA();
                    }
                }
                else
                {
                    ClearTargets();
                }
            }
            else if (mode == GadgetFactorSwapperMode.Join)
            {
                targetB = CheckLaser(r1, gadgetGraphics.transform.position + (GetAimVector() + Camera.main.transform.right * .1f) * range);
                targetC = CheckLaser(r2, gadgetGraphics.transform.position + (GetAimVector() + Camera.main.transform.right * -.1f) * range);
            }
        }
    }
    float GetEndArcThreshhold()
    {
        // pre-calculate where the whooshing object wil colllide and end its journey.
        float      maxDistToColliderBeforeEndArc = 0.1f;
        RaycastHit hit = new RaycastHit();

        for (int i = 0; i < vCount - 1; i++)
        {
            Vector3 currentDirection = (GetPositionAtIndex(i + 1) - GetPositionAtIndex(i));         // tangent to the arc at this point

            Ray ray = new Ray(GetPositionAtIndex(i), currentDirection.normalized);
            if (Physics.Raycast(ray, out hit, Mathf.Max(currentDirection.magnitude, maxDistToColliderBeforeEndArc), layerMask))
            {
                if (!hit.collider.GetComponent <WhooshingObject>() && !hit.collider.GetComponent <NumberHoop>())
                {
                    NumberInfo ni = hit.collider.GetComponent <NumberInfo>();
                    if (ni)
                    {
                        // path is obstructed by a number which may die at any time. Check periodically if it dies, then if it does, Recalculate the arc.
                        numberWasObstructing = true;
                        obstructingNumber    = ni;
//						Debug.Log("NEW num obstructing!");
                    }
                    else
                    {
//						Debug.Log("Nothing obstructing!");
                    }
//					Debug.Log("collide i :"+i+", hit col:"+hit.collider.name);
                    return(i);                    // don't collide with other objects being whooshed!
                }
            }
        }

        return(vCount);        // no colliisons
    }
示例#20
0
    public void CollectNumberLeft(GameObject o)      // DRY
    {
        if (eating || !canAcceptNumbers || !CanCollectNumber(o))
        {
            return;
        }
        if (numberLeft == null)
        {
            numberLeft = null;                             // for missing objects.. ugh
        }
        if (numberLeft)
        {
            return;
        }
        if (seedT.childCount > 0)
        {
//			if (seedT.GetChild(0).gameObject.activeSelf) return; // if player picked it up, it would be inactive..
            return;
        }
        NumberInfo ni = o.GetComponent <NumberInfo>();

        if (ni)
        {
            if (ni.fraction.denominator != 1 || ni.fraction.numerator < 0)
            {
                return;                                                                        // pos integers only
            }
            SetNumberLeft(ni);
        }
        if (numberRight && numberLeft)
        {
            EatNumbers();
        }
    }
示例#21
0
    public GameObject JustAteFX(Vector3 p, NumberInfo ni)
    {
        return(null);

        GameObject ret = (GameObject)Instantiate(justAteFX);

        ret.transform.position = p;
        if (ni.icon)
        {
            ret.GetComponentInChildren <JustAteFX>().justAteIcon.material.mainTexture = ni.icon.texture;
        }
        ret.GetComponentInChildren <JustAteFX>().numberSphereIcon.material.mainTexture = ni.fraction.GetAsFloat() > 0 ? NumberManager.inst.positiveSphereIcon : NumberManager.inst.negativeSphereIcon;
        ret.GetComponentInChildren <CCText>().Text = ni.fraction.ToString();
        switch (ni.fraction.ToString().Length)
        {
        case 0: break;

        case 1: ret.GetComponentInChildren <CCText>().transform.localScale = Vector3.one * 0.75f; break;

        case 2: ret.GetComponentInChildren <CCText>().transform.localScale = Vector3.one * 0.55f; break;

        case 3: ret.GetComponentInChildren <CCText>().transform.localScale = Vector3.one * 0.45f; break;

//		case 4:
        default: ret.GetComponentInChildren <CCText>().transform.localScale = Vector3.one * 0.4f; break;
        }
        return(ret);
    }
    void Trigger(GameObject other)
    {
        if (grabbing)
        {
            return;
        }

        NumberInfo ni = other.GetComponent <NumberInfo>();

        if (ni)
        {
            if (ignoredNumbers.Contains(ni))
            {
                return;
            }


            AudioManager.inst.PlayCartoonEat(ni.transform.position, 0.85f, 0.2f);
            ni.transform.position = startPos.position;
            ni.GetComponent <Rigidbody>().isKinematic = true;
            ni.GetComponent <Collider>().enabled      = false;
            grabbingNumber = ni;
            grabbing       = true;
            grabTimer      = 0;
        }
    }
    public override bool CanCollectItem(GameObject o)
    {
        NumberInfo ni   = o.GetComponent <NumberInfo>();
        bool       flag = false;

        if (!ni)
        {
            PlayerNowMessage.inst.Display("The Zooka can only hold number orbs!");
            flag = false;
        }
        else if (rocketAmmo.Count >= maxAmmo)
        {
            PlayerNowMessage.inst.Display("The Zooka can only hold 3 numbers!");
            flag = false;
        }
        else
        {
            flag = true;
        }
        if (flag)
        {
            flag = CanCollectNumber(ni);
        }
        if (!base.IsValidAmmo(o))
        {
            flag = false;
        }
        return(flag);
    }
示例#24
0
        public ThreeRegionDataInfo(ThreeRegion regionShape, int count, NumberInfo numberInfo)
        {
            _regionShape = regionShape;
            _count       = count;
            _numberInfo  = numberInfo;

            _keyNumbers = new ConcurrentDictionary <int, PeriodNumberInfo>();
        }
 void FreezeNumber(NumberInfo ni, float x)
 {
     ni.GetComponent <Rigidbody>().velocity   = Vector3.zero;
     ni.GetComponent <Rigidbody>().useGravity = false;
     ghosts.Add(ni.gameObject.GetComponent <Collider>());
     ni.SetNumber(new Fraction((int)x, 1));        // Integer result detected, allow it to stay (set number to its square root result
     ni.gameObject.SendMessage("StopDying", SendMessageOptions.DontRequireReceiver);
 }
示例#26
0
 void SetNumberLeft(NumberInfo ni)      // DRY
 {
     numberLeft              = ni;
     ni.transform.position   = startPositionLeft.position;
     ni.transform.localScale = Vector3.one * 1.5f;
     ni.transform.parent     = startPositionLeft;
     ni.transform.GetComponent <Rigidbody>().isKinematic = true;
     ni.gameObject.AddComponent <UseGravityOnPlayerPickup>();
 }
    public void ReceiveNumberZ(GameObject o)
    {
        NumberInfo ni = o.GetComponent <NumberInfo>();

        if (ni)
        {
            ReceiveNumberInput(axis[2], ni);
        }
    }
    void OnCollisionEnter(Collision hit)
    {
        NumberInfo ni = hit.collider.GetComponent <NumberInfo>();

        if (ni && !ni.GetComponent <ResourceNumber>())
        {
            transform.root.GetComponent <LevelMachine_DanMeyerCubes>().TrySolve(ni);
        }
    }
示例#29
0
 void NumberDestroyed(NumberInfo ni)
 {
     ni.numberDestroyedDelegate -= NumberDestroyed;
     ni.numberChangedDelegate   -= HandleNumberChanged;
     if (blobNumbers.Contains(ni))
     {
         blobNumbers.Remove(ni);
     }
 }
    void PlayerTouched(GameObject o)
    {
        NumberInfo ni = o.GetComponent <NumberInfo>();

        if (ni != null && spikeyChildren.Contains(ni))
        {
            MovePlayerBack();
        }
    }
 public void TrySolve(NumberInfo ni)
 {
     if (cubeState == CubeState.Ready)
     {
         StartCoroutine(Solving(ni.fraction));
         float kickForce = 400f;            // get thatwrong answer away from me!
         ni.GetComponent <Rigidbody>().AddForce((ni.transform.position - editorCameraParent.position) * kickForce);
     }
 }
示例#32
0
        public override void Initialize(PropertiesModel.Property property)
        {
            base.Initialize(property);

            m_info = property.EditorAdditionalData<NumberInfo>();

            m_textBox = new MetroTextBox();
            MetroSkinManager.ApplyMetroStyle(m_textBox);
            m_textBox.Width = 0;
            m_textBox.Dock = DockStyle.Top;
            m_textBox.TextChanged += m_textBox_TextChanged;
            m_textBox.CustomPaintForeground += m_textBox_CustomPaintForeground;
            m_textBox.Leave += m_textBox_Leave;
            Content.Controls.Add(m_textBox);

            UpdateEditor();
            m_textBox.Refresh();
        }