Ejemplo n.º 1
0
        public override void CreateModel()
        {
            //AvatarModelData data = AvatarModelData.dataMap[(int)vocation];
            //Debug.Log("EntityNPC.CreateModel(id=" + ID + ")");

            int modelID = NPCData.dataMap[(int)ID].mode;

            if (!AvatarModelData.dataMap.ContainsKey(modelID) && modelID != 150000)
            {
                return;
            }

            if (modelID != 150000)
            {
                AvatarModelData data = AvatarModelData.dataMap[modelID];

                AssetCacheMgr.GetInstanceAutoRelease(data.prefabName,
                                                     (prefab, guid, gameObject) =>
                {
                    GameObject            = gameObject as GameObject;
                    Transform             = (gameObject as GameObject).transform;
                    Transform.position    = position;
                    Transform.eulerAngles = rotation;
                    // Transform.localScale = scale;

                    animator = GameObject.GetComponent <Animator>();
                    SetIdleAction();

                    motor    = null;
                    npcMotor = GameObject.AddComponent <MogoMotorNPC>();

                    Transform.tag    = "NPC";
                    GameObject.layer = 17;    //Trap?
                    UpdatePosition();

                    ap = Transform.GetComponent <ActorNPC>();
                    if (ap == null)
                    {
                        Transform.gameObject.AddComponent <ActorNPC>();
                        ap = Transform.GetComponent <ActorNPC>();
                        (ap as ActorNPC).theEntity = this;
                    }

                    SphereCollider collider = Transform.gameObject.AddComponent <SphereCollider>();
                    collider.isTrigger      = true;
                    collider.center         = Vector3.zero;
                    collider.radius         = NPCData.dataMap[(int)ID].colliderRange / ((Transform.localScale.x < Transform.localScale.y ? Transform.localScale.x : Transform.localScale.y) < Transform.localScale.z ? (Transform.localScale.x < Transform.localScale.y ? Transform.localScale.x : Transform.localScale.y) : Transform.localScale.z);

                    BillboardLogicManager.Instance.AddInfoBillboard(ID, Transform, this, false);
                    BillboardLogicManager.Instance.SetHead(this);
                    EventDispatcher.TriggerEvent <Vector3, uint>(BillboardLogicManager.BillboardLogicEvent.UPDATEBILLBOARDPOS, Transform.position, ID);

                    MogoFXManager.Instance.AddShadow(GameObject, ID, 1 / Transform.localScale.x, 1 / Transform.localScale.y, 1 / Transform.localScale.z);

                    if (MogoWorld.thePlayer.CurrentTask != null)
                    {
                        if (MogoWorld.thePlayer.CurrentTask.conditionType == 1 && MogoWorld.thePlayer.CurrentTask.condition != null &&
                            MogoWorld.thePlayer.CurrentTask.condition.Count >= 3 && TaskData.dataMap.Get(MogoWorld.thePlayer.CurrentTask.condition[2]).npc == (int)ID)
                        {
                            SetNPCSign(NPCSignState.Doing);
                        }

                        if (MogoWorld.thePlayer.CurrentTask.isShowNPCTip == 1)
                        {
                            SetNPCSign(NPCSignState.Done);
                        }
                    }

                    ((GameObject)gameObject).AddComponent <MogoObjOpt>().ObjType = MogoObjType.NPC;

                    if (((GameObject)gameObject).GetComponent <Animator>() != null)
                    {
                        ((GameObject)gameObject).GetComponent <Animator>().enabled = false;
                    }

                    if (((GameObject)gameObject).GetComponent <Animation>() != null)
                    {
                        ((GameObject)gameObject).GetComponent <Animation>().enabled = false;
                    }

                    if (!NPCManager.npcEntitiePosition.ContainsKey((uint)ID))
                    {
                        NPCManager.npcEntitiePosition.Add((uint)ID, Transform.position);
                    }

                    EventDispatcher.TriggerEvent(Events.TaskEvent.CheckNpcInRange);

                    NPCCheckThink();
                }
                                                     );
            }
            else
            {
                GameObject            = new GameObject();
                GameObject.name       = "Sky_NPC";
                Transform             = GameObject.transform;
                Transform.position    = position;
                Transform.eulerAngles = rotation;
                // Transform.localScale = scale;
                Transform.tag = "NPC";

                UpdatePosition();

                ActorNPC ap = Transform.GetComponent <ActorNPC>();
                if (ap == null)
                {
                    Transform.gameObject.AddComponent <ActorNPC>();
                    ap = Transform.GetComponent <ActorNPC>();
                    (ap as ActorNPC).theEntity = this;
                }

                SphereCollider collider = Transform.gameObject.AddComponent <SphereCollider>();
                collider.isTrigger = true;
                collider.center    = Vector3.zero;
                collider.radius    = 5;
            }
        }
Ejemplo n.º 2
0
        public override void CreateModel()
        {
            //AvatarModelData data = AvatarModelData.dataMap[(int)vocation];
            LoggerHelper.Debug("EntityNPC create:" + ID);

            int modelID = NPCData.dataMap[(int)ID].mode;

            if (!AvatarModelData.dataMap.ContainsKey(modelID) && modelID != 150000)
                return;

            if (modelID != 150000)
            {
                AvatarModelData data = AvatarModelData.dataMap[modelID];

                AssetCacheMgr.GetInstanceAutoRelease(data.prefabName,
                    (prefab, guid, gameObject) =>
                    {
                        GameObject = gameObject as GameObject;
                        Transform = (gameObject as GameObject).transform;
                        Transform.position = position;
                        Transform.eulerAngles = rotation;
                        // Transform.localScale = scale;

                        animator = GameObject.GetComponent<Animator>();
                        SetIdleAction();

                        motor = null;
                        npcMotor = GameObject.AddComponent<MogoMotorNPC>();

                        Transform.tag = "NPC";
                        GameObject.layer = 17;
                        UpdatePosition();

                        ap = Transform.GetComponent<ActorNPC>();
                        if (ap == null)
                        {
                            Transform.gameObject.AddComponent<ActorNPC>();
                            ap = Transform.GetComponent<ActorNPC>();
                            (ap as ActorNPC).theEntity = this;
                        }

                        SphereCollider collider = Transform.gameObject.AddComponent<SphereCollider>();
                        collider.isTrigger = true;
                        collider.center = Vector3.zero;
                        collider.radius = NPCData.dataMap[(int)ID].colliderRange / ((Transform.localScale.x < Transform.localScale.y ? Transform.localScale.x : Transform.localScale.y) < Transform.localScale.z ? (Transform.localScale.x < Transform.localScale.y ? Transform.localScale.x : Transform.localScale.y) : Transform.localScale.z);

                        BillboardLogicManager.Instance.AddInfoBillboard(ID, Transform, this, false);
                        BillboardLogicManager.Instance.SetHead(this);
                        EventDispatcher.TriggerEvent<Vector3,uint>(BillboardLogicManager.BillboardLogicEvent.UPDATEBILLBOARDPOS, Transform.position,ID);

                        MogoFXManager.Instance.AddShadow(GameObject, ID, 1 / Transform.localScale.x, 1 / Transform.localScale.y, 1 / Transform.localScale.z);

                        if (MogoWorld.thePlayer.CurrentTask != null)
                        {
                            if (MogoWorld.thePlayer.CurrentTask.conditionType == 1 && MogoWorld.thePlayer.CurrentTask.condition != null
                                && MogoWorld.thePlayer.CurrentTask.condition.Count >= 3 && TaskData.dataMap.Get(MogoWorld.thePlayer.CurrentTask.condition[2]).npc == (int)ID)
                            {
                                SetNPCSign(NPCSignState.Doing);
                            }

                            if (MogoWorld.thePlayer.CurrentTask.isShowNPCTip == 1)
                            {
                                SetNPCSign(NPCSignState.Done);
                            }
                        }

                        ((GameObject)gameObject).AddComponent<MogoObjOpt>().ObjType = MogoObjType.NPC;

                        if (((GameObject)gameObject).GetComponent<Animator>() != null)
                        {
                            ((GameObject)gameObject).GetComponent<Animator>().enabled = false;
                        }

                        if (((GameObject)gameObject).GetComponent<Animation>() != null)
                        {
                            ((GameObject)gameObject).GetComponent<Animation>().enabled = false;
                        }

                        if (!NPCManager.npcEntitiePosition.ContainsKey((uint)ID))
                            NPCManager.npcEntitiePosition.Add((uint)ID, Transform.position);

                        EventDispatcher.TriggerEvent(Events.TaskEvent.CheckNpcInRange);

                        NPCCheckThink();
                    }
                );
            }
            else
            {
                GameObject = new GameObject();
                GameObject.name = "Sky_NPC";
                Transform = GameObject.transform;
                Transform.position = position;
                Transform.eulerAngles = rotation;
                // Transform.localScale = scale;
                Transform.tag = "NPC";

                UpdatePosition();

                ActorNPC ap = Transform.GetComponent<ActorNPC>();
                if (ap == null)
                {
                    Transform.gameObject.AddComponent<ActorNPC>();
                    ap = Transform.GetComponent<ActorNPC>();
                    (ap as ActorNPC).theEntity = this;
                }

                SphereCollider collider = Transform.gameObject.AddComponent<SphereCollider>();
                collider.isTrigger = true;
                collider.center = Vector3.zero;
                collider.radius = 5;
            }
        }