Exemplo n.º 1
0
 //怪物出厂设置
 void ResetMonster(MonsterData monsterData, Vector3 monsterSource, MonsterSource callback)
 {
     //所有的Monster应该在刷怪处
     //修改位置属性
     //在塔防为中心的矩形范围内随机生成终点
     monsterData.gameObject.transform.SetParent(sceneController.SmartSurface.gameObject.transform);
     monsterData.gameObject.transform.position = monsterSource;
     monsterData.isDie          = false;
     monsterData.isInTower      = false;
     monsterData.hp             = 3;
     monsterData.sourceCallback = callback;
     //对动画机进行设置
     monsterData.gameObject.GetComponent <Animator>().SetBool("Attack", false);
 }
Exemplo n.º 2
0
        public void MonsterTest()
        {
            var o = new Ontology(nameof(MonsterTest));

            foreach (var decl in MonsterSource.Replace("\r", "").Split(new [] { '\n' }, StringSplitOptions.RemoveEmptyEntries))
            {
                o.ParseAndExecute(decl);
            }
            var g = o.CommonNoun("monster").MakeGenerator(20);

            for (var n = 0; n < 100; n++)
            {
                g.Generate();
            }
            Console.WriteLine(g.Problem.PerformanceStatistics);
            Console.WriteLine($"Average flips per solve: {g.Problem.SolveFlips.Average}");
        }
Exemplo n.º 3
0
    //生产怪物
    //生产怪物需要两个参数:
    //1. 怪物的生产点
    //2. 怪物的类型
    public void GetMonster(Vector3 monsterSource, MonsterSource callback, int type)
    {
        List <MonsterData> usingMonster;
        List <MonsterData> unusedMonster;

        //检查词典链表是否为空,并进行初始化
        if (usingMonster_.ContainsKey(type) == false)
        {
            usingMonster_.Add(type, new List <MonsterData>());
        }
        if (unusedMonster_.ContainsKey(type) == false)
        {
            unusedMonster_.Add(type, new List <MonsterData>());
        }

        //获取对相应武器类型的链表引用
        usingMonster  = usingMonster_[type];
        unusedMonster = unusedMonster_[type];

        MonsterData monsterData = null;

        if (unusedMonster.Count != 0)
        {
            //取出怪物复用
            monsterData = unusedMonster[0];
            monsterData.gameObject.SetActive(true);
            unusedMonster.RemoveAt(0);
        }
        else
        {
            GameObject newMonster = null;
            //根据怪物类型进行实例化
            switch (type)
            {
            case 1:
                newMonster = Instantiate(monster);
                break;

            case 2:
                newMonster = Instantiate(remote_monster);
                break;
            }
            if (newMonster != null)
            {
                monsterData = newMonster.GetComponent <MonsterData>();
                //对怪物名字进行修改
                newMonster.gameObject.name = "Monster" + type + "_" + usingMonster.Count;
            }
        }

        //创建不为空
        if (monsterData != null)
        {
            //对怪物信息进行初始化
            ResetMonster(monsterData, monsterSource, callback);
            //Vector3.forward * 0.3f;
            usingMonster.Add(monsterData);

            //近战怪物需要添加动作
            //远战怪物通过动画帧事件来进行发射攻击
            switch (type)
            {
            case 1:
                //获取终点
                Vector3 destination = sceneController.mainTower.transform.position;
                destination.x += Random.Range(-0.5f, 0.5f);
                destination.z += Random.Range(-0.5f, 0.5f);

                //记录运动终点
                monsterData.destination = destination;

                //对怪物添加动作
                sceneController.actionManager.Play(monsterData.gameObject, new Vector3(destination.x, 0, destination.z));
                break;

            case 2:
                //令怪物朝向主角方向
                monsterData.gameObject.transform.LookAt(new Vector3(sceneController.player.transform.position.x,
                                                                    monsterData.gameObject.transform.position.y,
                                                                    sceneController.player.transform.position.z));
                //修改怪物的动画状态
                monsterData.gameObject.GetComponent <Animator>().SetBool("Attack", true);
                break;
            }
        }
    }