Exemple #1
0
    //public RuntimeAnimatorController[] ThreeAniController;  //存储三态跳跃动画控制器,气液固(蓄力跳)

    /// <summary>
    /// 生成物质的接口
    /// </summary>
    /// <param name="matter">物质</param>
    /// <param name="tr">要生成的位置</param>
    /// <param name="type">是玩家还是其他的物质</param>
    public void CreateMatterObject(ChemistyMatter matter, Transform tr, CreatMatterType type)
    {
        //寻找要生成的prefab
        GameObject m = MatterList.Find(x => x.GetComponent <MatterName>().matterName == matter.name &&
                                       x.GetComponent <MatterName>().matterState == matter.state);
        //生成
        GameObject t = Instantiate(m, tr.position, tr.rotation);

        //无效化没必要的组件
        switch (type)
        {
        case CreatMatterType.Player:
            Destroy(t.GetComponent <MatterReactionChecker>());

            //选择反应绑定
            PlayerReactionChecker pr = t.GetComponent <PlayerReactionChecker>();
            pr.reactionManager = rctMng;
            pr.equUI           = equUI;
            pr.createManager   = this.gameObject;
            //pr.ChooseKey1 = ChooseKey1;
            //pr.ChooseKey2 = ChooseKey2;
            //pr.ChooseKey3 = ChooseKey3;
            //pr.changeEquKey = ChangeKey;

            //移动与物理材质绑定
            PlayerController p = t.GetComponent <PlayerController>();
            //p.MoveLeftButton = MoveLeft;
            //p.MoveRightButton = MoveRight;
            //p.JumpButton = Jump;
            p.p1 = HasF;
            p.p2 = NotF;

            //t.AddComponent<Animator>();//添加动画组件并由Player状态选择添加动画控制器     //蓄力跳
            //Animator ani = t.GetComponent<Animator>();
            //MatterName pn = t.GetComponent<MatterName>();
            //switch(pn.matterState)
            //{
            //    case MatterState.gas:
            //        ani.runtimeAnimatorController = ThreeAniController[0];
            //        if(pn.matterName=="CO2"|| pn.matterName == "O2")
            //        {
            //            p.IsOpposite = false;
            //        }else
            //        {
            //            p.IsOpposite = true;
            //        }

            //        break;
            //    case MatterState.liquid:
            //        ani.runtimeAnimatorController = ThreeAniController[1];
            //        p.IsOpposite = false;
            //        break;
            //    case MatterState.solid:
            //        ani.runtimeAnimatorController = ThreeAniController[2];
            //        p.IsOpposite = false;
            //        break;
            //}

            t.tag = "Player";

            cmr.GetComponent <CameraFollowing>().ChangeTarget(t, false);
            break;

        case CreatMatterType.Matter:
            Destroy(t.GetComponent <PlayerController>());
            Destroy(t.GetComponent <PlayerReactionChecker>());
            t.GetComponent <MatterReactionChecker>().reactionManager = rctMng;
            t.GetComponent <MatterReactionChecker>().createManager   = this.gameObject;
            t.tag = "Matter";
            break;
        }
    }
Exemple #2
0
    private void Start()
    {
        realText = EquationText.text;                   //提取文件数据
        cmtEqu   = new List <ChemicalEqu>();            //储存方程式
        char[] t = new char[50];                        //提取句子容器

        //遍历数据
        for (int i = 0; i < realText.Length; i++)
        {
            int j = 0;      //句子容器累加
            int k = 0;
            //提取一行
            while (i < realText.Length && realText[i] != '\n')
            {
                t[j++] = realText[i++];
            }
            char[]         m   = new char[50];              //提取物质容器
            ChemistyMatter cm  = new ChemistyMatter();      //储存物质中介
            ChemicalEqu    equ = new ChemicalEqu
            {
                input  = new List <ChemistyMatter>(),
                output = new List <ChemistyMatter>()
            };                   //储存方程中介

            bool isInput = true; //判断反应物生成物
            int  index   = 0;    //用于物质容器
            for (; k < j; k++)
            {
                char[] mm;
                switch (t[k])
                {
                case '+':
                    m[index - 1] = '\0';
                    mm           = new char[index - 1];
                    CharCopy(mm, m, index - 1);
                    cm.name = new string(mm);
                    m.Initialize();
                    index = 0;
                    switch (t[k - 1])
                    {
                    case 'g':
                        cm.state = MatterState.gas;
                        break;

                    case 'l':
                        cm.state = MatterState.liquid;
                        break;

                    case 's':
                        cm.state = MatterState.solid;
                        break;
                    }

                    if (isInput)
                    {
                        equ.input.Add(cm);
                    }
                    else
                    {
                        equ.output.Add(cm);
                    }
                    break;

                case '[':
                    m[index - 1] = '\0';
                    mm           = new char[index - 1];
                    CharCopy(mm, m, index - 1);
                    cm.name = new string(mm);
                    m.Initialize();
                    index = 0;
                    switch (t[k - 1])
                    {
                    case 'g':
                        cm.state = MatterState.gas;
                        break;

                    case 'l':
                        cm.state = MatterState.liquid;
                        break;

                    case 's':
                        cm.state = MatterState.solid;
                        break;
                    }
                    equ.input.Add(cm);
                    isInput = false;
                    switch (t[k + 1])
                    {
                    case 'N':
                        equ.conditon = ReactionCondition.normal;
                        break;

                    case 'L':
                        equ.conditon = ReactionCondition.light;
                        break;

                    case 'H':
                        equ.conditon = ReactionCondition.heat;
                        break;

                    case 'E':
                        equ.conditon = ReactionCondition.electrify;
                        break;

                    case 'C':
                        equ.conditon = ReactionCondition.condense;
                        break;

                    case 'V':
                        equ.conditon = ReactionCondition.evaporation;
                        break;
                    }
                    k += 2;
                    break;

                default:
                    m[index++] = t[k];
                    break;
                }
            }
            switch (m[index - 2])
            {
            case 'g':
                cm.state = MatterState.gas;
                break;

            case 'l':
                cm.state = MatterState.liquid;
                break;

            case 's':
                cm.state = MatterState.solid;
                break;
            }
            m[index - 2] = '\0';
            char[] cmm = new char[index - 2];
            CharCopy(cmm, m, index - 2);
            cm.name = new string(cmm);
            equ.output.Add(cm);
            cmtEqu.Add(equ);
        }


        ////输出实验
        //foreach (ChemicalEqu equ in cmtEqu)
        //{
        //    foreach (ChemistyMatter mt in equ.input)
        //    {
        //        Debug.Log(mt.name);
        //        Debug.Log(mt.name.Length);
        //        switch (mt.state)
        //        {
        //            case MatterState.gas:
        //                Debug.Log("气体");
        //                break;
        //            case MatterState.liquid:
        //                Debug.Log("液体");
        //                break;
        //            case MatterState.solid:
        //                Debug.Log("固体");
        //                break;
        //        }
        //    }
        //    switch (equ.conditon)
        //    {
        //        case ReactionCondition.heat:
        //            Debug.Log("加热");
        //            break;
        //        case ReactionCondition.light:
        //            Debug.Log("点燃");
        //            break;
        //        case ReactionCondition.normal:
        //            Debug.Log("常态");
        //            break;
        //    }
        //    foreach (ChemistyMatter mt in equ.output)
        //    {
        //        Debug.Log(mt.name);
        //        Debug.Log(mt.name.Length);
        //        switch (mt.state)
        //        {
        //            case MatterState.gas:
        //                Debug.Log("气体");
        //                break;
        //            case MatterState.liquid:
        //                Debug.Log("液体");
        //                break;
        //            case MatterState.solid:
        //                Debug.Log("固体");
        //                break;
        //        }
        //    }
        //}
        //Debug.Log(cmtEqu.Count);
        //Debug.Log(cmtEqu[1].input[0].name + cmtEqu[1].input[1].name);
    }