public static GameObject BuildPrefab(AvatarData avatarData)
        {
            GameObject go = new GameObject();

            go.name = unitName;
            SpriteRenderer spriteRender = go.AddComponent <SpriteRenderer>();
            Isometric      isometric    = go.AddComponent <Isometric>();

            isometric.faceCamera = true;
            go.AddComponent <SpriteAnimation>();
            SpriteAvatar avatar = go.AddComponent <SpriteAvatar>();

            avatar.avatarData = avatarData;
            avatar.action     = defaultAction;
            avatar.angle      = defaultAngle;
            if (autoDestory)
            {
                go.AddComponent <AutoDestoryOnActionComplete>();
            }

            string path = PrefabPath + "/" + typeName + "/" + unitName + ".prefab";

            CheckPath(path);
            PrefabUtility.CreatePrefab(path, go);
            DestroyImmediate(go);
            return(go);
        }
Exemple #2
0
        public void Synchronous()
        {
            SpriteAvatar spriteAvatar = (SpriteAvatar)avatar;

            if (spriteAvatar != null)
            {
                spriteAvatar.Synchronous();
            }
        }
        void GUI_Wall()
        {
            EditorGUILayout.BeginVertical(style_box_marginleft);

            foreach (KeyValuePair <int, BuildWallConfig> kvp in War.model.buildWallConfigs)
            {
                BuildWallConfig wallConfig = kvp.Value;

                GUILayout.Space(10);
                EditorGUILayout.BeginHorizontal();

                GUILayout.Label(wallConfig.id + "", style_label_wall_id, GUILayout.Width(50), GUILayout.Height(100));

                AvatarConfig avatarConfig = Goo.avatar.GetConfig(wallConfig.avatarId);
                GameObject   prefab       = null;
                if (avatarConfig != null)
                {
                    prefab = WarRes.GetPrefab(avatarConfig.model);
                }

                if (prefab)
                {
                    SpriteAvatar spriteAvatar = prefab.GetComponent <SpriteAvatar>();
                    Sprite       sprite       = spriteAvatar.avatarData.avatarActions[0].GetSpriteAnimationClip(wallConfig.angle).frames[0];


                    Texture2D tex = null;
                    if (!wall_icon_dict.TryGetValue(sprite, out tex))
                    {
                        tex = new Texture2D((int)sprite.rect.width, (int)sprite.rect.height, TextureFormat.RGBA32, false);

                        Color[] pixels = sprite.texture.GetPixels((int)sprite.rect.xMin, (int)sprite.rect.yMin,
                                                                  (int)sprite.rect.width, (int)sprite.rect.height);
                        tex.SetPixels(pixels);
                        tex.Apply();
                        wall_icon_dict.Add(sprite, tex);
                    }

                    if (GUILayout.Button(tex, GUILayout.Width(100), GUILayout.Height(100)))
                    {
                        Click_Wall(wallConfig);
                    }
                }
                else
                {
                    GUILayout.Button("没有资源", GUILayout.Width(100), GUILayout.Height(100));

                    if (avatarConfig != null)
                    {
                        WarEditor.LoadRes(avatarConfig.model);
                    }
                }


                GUILayout.Label(wallConfig.name, style_label_wall_line, GUILayout.Width(100), GUILayout.Height(100));
                GUILayout.Label(wallConfig.wallType == WallType.Cube ? "立方体" : "球", style_label_wall_line, GUILayout.Width(50), GUILayout.Height(100));
                if (wallConfig.wallType == WallType.Cube)
                {
                    GUILayout.Label("角度:" + wallConfig.angle, style_label_wall_line, GUILayout.Width(100), GUILayout.Height(100));
                    GUILayout.Label("大小:" + wallConfig.size.x + "x" + wallConfig.size.z, style_label_wall_line, GUILayout.Width(100), GUILayout.Height(100));
                }
                else
                {
                    GUILayout.Label("半径:" + wallConfig.radius, style_label_wall_line, GUILayout.Width(100), GUILayout.Height(100));
                }


                EditorGUILayout.EndHorizontal();
                GUILayout.Space(10);
                GUILayout.Box("", GUILayout.ExpandWidth(true), GUILayout.Height(1));
            }
            EditorGUILayout.EndVertical();
        }
Exemple #4
0
        virtual public void SetAvatar(string prefabFile)
        {
            if (this.prefabFile == prefabFile)
            {
                return;
            }
            this.prefabFile = prefabFile;


            GameObject prefab = WarRes.GetPrefab(prefabFile);

            if (avatar == null)
            {
                if (prefab == null)
                {
                    Debug.Log(string.Format("<color=red>单位资源没找到 prefabFile={0}</color>", prefabFile));
                }
                GameObject go = GameObject.Instantiate(prefab);
                go.name = "avatar";
                go.transform.SetParent(avatarContainer);
                go.transform.localPosition = unitData.unitType == UnitType.Solider ? new Vector3(0, 0, 0.5f) : Vector3.zero;
                avatar             = go.GetComponent <Avatara>();
                avatarInfo         = go.GetComponent <AvatarInfo>();
                avatarSpriteRender = go.GetComponent <SpriteRenderer> ();
                defaultMaterial    = avatarSpriteRender.material;
            }
            else
            {
//                Debug.Log("prefabFile=" + prefabFile + " , prefab=" + prefab);
                SpriteAvatar spriteAvatar       = (SpriteAvatar)avatar;
                SpriteAvatar prefabSpriteAvatar = prefab.GetComponent <SpriteAvatar>();
                if (prefabSpriteAvatar != null)
                {
                    spriteAvatar.avatarData = prefabSpriteAvatar.avatarData;
                    avatar.gameObject.transform.localScale = prefab.transform.localScale;
                }
                else
                {
                    Debug.LogFormat("<color=red>prefabFile={0} 有问题</color>", prefabFile);
                }

                if (avatarInfo != null)
                {
                    AvatarInfo spriteAvatarInfo = prefab.GetComponent <AvatarInfo>();
                    avatarInfo.CopyInfo(spriteAvatarInfo);
                }
            }

            avatar.angle  = angel;
            avatar.action = action;
            avatar.speed  = speed;

            if (materialType != WarMaterialsType.stateDefault)
            {
                _materialType = materialType;
                avatarSpriteRender.material = War.materials.GetMaterial(materialType);
            }

            if (sChangeAvatar != null)
            {
                sChangeAvatar(this);
            }
        }
        void GUI_Build(int buildTypeValue, string name)
        {
            EditorGUILayout.BeginVertical(style_box_marginleft);
            buildSwitchs[buildTypeValue] = GUILayout.Toggle(buildSwitchs[buildTypeValue], name, style_label_type, GUILayout.ExpandWidth(true));
            if (buildSwitchs[buildTypeValue])
            {
                GUIContent iconContent = new GUIContent("");
                GUILayout.BeginHorizontal(iconContent, style_box_key);
                int column = 0;
                for (int i = 0; i < colorEnables.Length; i++)
                {
                    if (colorEnables[i])
                    {
                        GUILayout.Space(10);
                        GUILayout.Label(colorNames[i], style_box_key, GUILayout.Width(100), GUILayout.Height(18));
                        GUILayout.Space(10);
                        column++;
                    }
                }
                GUILayout.EndHorizontal();


                foreach (KeyValuePair <int, BuildConfig> kvp in War.model.buildConfigs)
                {
                    BuildConfig buildConfig = kvp.Value;

                    if ((int)buildConfig.buildType != buildTypeValue + 1)
                    {
                        continue;
                    }

                    GUILayout.Space(20);

                    foreach (KeyValuePair <int, BuildLevelConfig> levelKVP in buildConfig.levels)
                    {
                        BuildLevelConfig levelConfig = levelKVP.Value;
                        if (levelEnables[levelConfig.level - 1] == false)
                        {
                            continue;
                        }

                        EditorGUILayout.BeginHorizontal(GUILayout.Width(column * 120));
                        for (int i = 0; i < colorEnables.Length; i++)
                        {
                            if (colorEnables[i])
                            {
                                AvatarConfig avatarConfig = Goo.avatar.GetConfig(levelConfig.avatarId);
                                string       file         = avatarConfig.GetModelPath(colorIds[i]);

                                GameObject prefab = WarRes.GetPrefab(file);
                                if (prefab)
                                {
                                    GUILayout.Space(10);
                                    EditorGUILayout.BeginVertical();
                                    SpriteAvatar spriteAvatar = prefab.GetComponent <SpriteAvatar>();
                                    Sprite       sprite       = spriteAvatar.avatarData.avatarActions[0].clips[0].frames[0];
                                    if (GUILayout.Button(sprite.texture, GUILayout.Width(100), GUILayout.Height(100)))
                                    {
                                        Click_Build(colorIds[i], levelConfig.level, buildConfig);
                                    }
                                    GUILayout.Label(buildConfig.id + " " + levelConfig.name, style_label_icon_hasbg, GUILayout.Width(100));

                                    if (levelConfig.basepropId > 0)
                                    {
                                        GUILayout.Label("<color=#55AAAA><b>#" + levelConfig.basepropId + " 基本属性</b></color>", style_label_prop);
                                        foreach (Prop prop in levelConfig.basepropConfig.props)
                                        {
                                            GUILayout.Label("<color=#88AAAA>" + prop.id + " " + prop.Name + ":" + prop.ValueStr + "</color>", style_label_prop, GUILayout.Width(150));
                                        }
                                    }

                                    if (levelConfig.produceId > 0)
                                    {
                                        GUILayout.Space(5);
                                        GUILayout.Label("<color=#55AA55><b>#" + levelConfig.produceId + " 生产属性</b></color>", style_label_prop);
                                        foreach (Prop prop in levelConfig.produceConfig.props)
                                        {
                                            GUILayout.Label("<color=#88AA88>" + prop.id + " " + prop.Name + ":" + prop.ValueStr + "</color>", style_label_prop, GUILayout.Width(150));
                                        }
                                    }

                                    if (levelConfig.turretId > 0)
                                    {
                                        GUILayout.Space(5);
                                        GUILayout.Label("<color=#AA5555><b>#" + levelConfig.turretId + " 箭塔属性</b></color>", style_label_prop);
                                        foreach (Prop prop in levelConfig.turretConfig.props)
                                        {
                                            GUILayout.Label("<color=#AA8888>" + prop.id + " " + prop.Name + ":" + prop.ValueStr + "</color>", style_label_prop, GUILayout.Width(150));
                                        }
                                    }

                                    if (levelConfig.spotId > 0)
                                    {
                                        GUILayout.Space(5);
                                        GUILayout.Label("<color=#5555AA><b>#" + levelConfig.spotId + " 据点属性</b></color>", style_label_prop);
                                        foreach (Prop prop in levelConfig.spotConfig.props)
                                        {
                                            GUILayout.Label("<color=#8888AA>" + prop.id + " " + prop.Name + ":" + prop.ValueStr + "</color>", style_label_prop, GUILayout.Width(150));
                                        }
                                    }

                                    EditorGUILayout.EndVertical();
                                    GUILayout.Space(10);
                                }
                                else
                                {
                                    GUILayout.Space(10);
                                    GUILayout.Button("没有资源", GUILayout.Width(100), GUILayout.Height(100));
                                    GUILayout.Space(10);

                                    WarEditor.LoadRes(file);
                                }
                            }
                        }
                        EditorGUILayout.EndHorizontal();
                    }


                    GUILayout.Space(20);
                }
            }
            EditorGUILayout.EndVertical();
        }