Пример #1
0
        public ServerControllable InstantiateMonster(ref MonsterSpawnParameters param)
        {
            if (!isInitialized)
            {
                Initialize();
            }

            var mData = monsterClassLookup[4000];             //poring

            if (monsterClassLookup.TryGetValue(param.ClassId, out var lookupData))
            {
                mData = lookupData;
            }
            else
            {
                Debug.LogWarning("Failed to find monster with id of " + param.ClassId);
            }

            if (mData.SpriteName.Contains(".prefab"))
            {
                return(PrefabMonster(mData, ref param));
            }

            var go = new GameObject(mData.Name);

            go.layer = LayerMask.NameToLayer("Characters");
            go.transform.localScale = new Vector3(1.5f * mData.Size, 1.5f * mData.Size, 1.5f * mData.Size);
            var control = go.AddComponent <ServerControllable>();

            control.CharacterType = CharacterType.Monster;
            control.SpriteMode    = ClientSpriteType.Sprite;
            go.AddComponent <Billboard>();

            var child = new GameObject("Sprite");

            child.layer = LayerMask.NameToLayer("Characters");
            child.transform.SetParent(go.transform, false);
            child.transform.localPosition = Vector3.zero;

            var sprite = child.AddComponent <RoSpriteAnimator>();

            sprite.Controllable = control;

            control.SpriteAnimator = sprite;
            control.SpriteAnimator.SpriteOffset = mData.Offset;
            control.ShadowSize = mData.ShadowSize;
            control.IsAlly     = false;

            control.ConfigureEntity(param.ServerId, param.Position, param.Facing);

            AddressableUtility.LoadRoSpriteData(go, "Assets/Sprites/Monsters/" + mData.SpriteName, control.SpriteAnimator.OnSpriteDataLoad);
            if (mData.ShadowSize > 0)
            {
                AddressableUtility.LoadSprite(go, "shadow", control.AttachShadow);
            }

            return(control);
        }
Пример #2
0
        private ServerControllable PrefabMonster(MonsterClassData mData, ref MonsterSpawnParameters param)
        {
            var prefabName = mData.SpriteName.Replace(".prefab", "");
            var split      = prefabName.Split('/');

            prefabName = split.Last();
            //Debug.Log(prefabName);
            var obj     = GameObject.Instantiate(Resources.Load <GameObject>(prefabName));
            var control = obj.AddComponent <ServerControllable>();

            control.CharacterType = CharacterType.NPC;
            control.SpriteMode    = ClientSpriteType.Prefab;
            control.EntityObject  = obj;

            control.ConfigureEntity(param.ServerId, param.Position, param.Facing);

            return(control);
        }