using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Serialization;
using UnityEngine.EventSystems;
using System;
using System.Xml;
using System.Collections;
using System.Collections.Generic;
using Random = UnityEngine.Random;
public enum OpType
{
Rip,
Water,
Fertilize,
}
public class FlowerInfo
{
#region 变量
public bool Plant
{
get { return _Plant; }
set
{
_Plant = value;
if (_Plant)
{
Text.SetActive(true);
ManaLan.Add(Text, new LanStr("Object", "FlowerItemG_Lab"));
UIPartical.Begin();
}
else
{
Text.SetActive(false);
}
}
}
public bool Unlock
{
get { return _Unlock; }
set
{
_Unlock = value;
if (_Unlock)
{
Image.material = null;
Button.interactable = true;
if (Special)
{
if (ManaGarden.MyFlowerSpec == 0)
{
ManaReso.Get("G_Regular").TweenForVec();
ManaReso.SetActive("G_Special", true);
}
ManaGarden.MyFlowerSpec++;
}
else
{
ManaGarden.MyFlowerRegu++;
}
ManaData.SkillPlus += 0.1f;
ManaDebug.Log(string.Format("获得{0} 收入+10% ", Name));
}
}
}
public string Name
{
get
{
return Language.GetStr("FlowerName", ID);
}
}
public string ID
{
get
{
return "Flower" + ID_;
}
}
public string Description
{
get { return Language.GetStr("FlowerDesc", ID); }
}
public Sprite Icon
{
get { return ManaReso.Load(Icon_, Folder.Scene); }
}
public int ID_;
public bool _Plant;
public bool _Unlock;
public string Icon_;
public bool Special;
public Slot Slot;
public Text Text;
public Image Image;
public Button Button;
public UIPartical UIPartical;
public Transform FlowerItem;
#endregion
public FlowerInfo(XmlAttributeCollection attribute)
{
FlowerItem = ManaReso.Get("FlowerItemG", Folder.UI, false, ManaReso.Get("G_RegularGrid"), false);
Dictionary dic = new Dictionary();
Auxiliary.CompileDic(FlowerItem, dic);
Text = dic["Lab"].GetComponent();
Image = dic["Icon"].GetComponent();
Button = dic["FlowerItemG"].GetComponent();
UIPartical = dic["UIParticle System"].GetComponent();
ID_ = int.Parse(attribute[0].Value);
Icon_ = attribute[3].Value;
Image.sprite = Icon;
Vector2 newSize = Icon.rect.size;
newSize.x *= 0.2f;
newSize.y *= 0.2f;
Image.rectTransform.sizeDelta = newSize;
Button.onClick.AddListener
(
() =>
{
ManaGarden.PlantFlower(this);
}
);
}
}
public class Flower : ObjRoot, IPointerClickHandler
{
#region 变量
#region MiniGame
public OpType OpType
{
get { return OpType_; }
set
{
OpType_ = value;
if (OpType_ == OpType.Rip)
{
OperateIcon.sprite = RipSprite;
}
else if (OpType_ == OpType.Water)
{
OperateIcon.sprite = WaterSprite;
}
else if (OpType_ == OpType.Fertilize)
{
OperateIcon.sprite = FertilizeSprite;
}
}
}
public OpType OpType_;
public SpriteRenderer FlowerIcon;
public SpriteRenderer OperateBk;
public SpriteRenderer OperateIcon;
public SpriteRenderer OperateOutline;
#endregion
public bool Award
{
get { return Award_; }
set
{
Award_ = value;
if (Award_)
{
ShowAward();
}
else
{
GetAward();
}
}
}
public Sprite RipSprite
{
get
{
return ManaReso.Load("Rip", Folder.UI);
}
}
public Sprite WaterSprite
{
get
{
return ManaReso.Load("Water", Folder.UI);
}
}
public Sprite FertilizeSprite
{
get
{
return ManaReso.Load("Fertilize", Folder.UI);
}
}
public FlowerInfo FlowerInfo
{
get { return FlowerInfo_; }
set
{
FlowerInfo_ = value;
ID = FlowerInfo.ID_;
FlowerIcon.sprite = FlowerInfo.Icon;
}
}
public bool Award_;
private FlowerInfo FlowerInfo_;
public int ID;
public Slot Slot;
public Vector3 LocalPos;
public Animator ParticleAC;
public Transform GoldBk;
public Transform GoldIcon;
public List ElfList = new List();
private Dictionary ChildDic = new Dictionary();
#endregion
public override void RegistImmed()
{
enabled = true;
Auxiliary.CompileDic(transform, ChildDic);
GoldBk = ChildDic["GoldBk"];
GoldIcon = ChildDic["GoldIcon"];
ParticleAC = ChildDic["FlashLight"].GetComponent();
FlowerIcon = ChildDic["FlowerIcon"].GetComponent();
OperateBk = ChildDic["OperateBk"].GetComponent();
OperateIcon = ChildDic["OperateIcon"].GetComponent();
OperateOutline = ChildDic["OperateOutline"].GetComponent();
Tween tween = FlowerIcon.CreateTweenSr(new Color(1, 1, 1), new Color(1, 0.5f, 0.5f), 0.2f, true, true, Curve.EaseOutQuad);
tween.OnForwardFinish += () =>
{
FlowerIcon.TweenBacSr();
};
tween = OperateIcon.CreateTweenSr(new Color(1, 1, 1), new Color(1, 0.5f, 0.5f), 0.2f, true, true, Curve.EaseOutQuad);
tween.OnForwardFinish += () =>
{
OperateIcon.TweenBacSr();
};
tween = OperateBk.CreateTweenSr(new Color(1, 1, 1), new Color(1, 0.5f, 0.5f), 0.2f, true, true, Curve.EaseOutQuad);
tween.OnForwardFinish += () =>
{
OperateBk.TweenBacSr();
};
OperateBk.CreateTweenScale(OperateBk.transform.localScale + new Vector3(0.1f, 0.1f, 0.1f), 0.25f, false, true, Curve.EaseOutQuad);
}
#region MiniGame
public void GameOver()
{
ChildDic["MiniGame"].SetActive(false);
OperateBk.TweenBacScale();
}
public void GameBegin()
{
ChildDic["MiniGame"].SetActive(true);
OperateIcon.SetActive(false);
}
public void FirstOp()
{
OperateBk.TweenForScale();
OperateIcon.SetAlpha(1);
OperateOutline.SetAlpha(1);
OperateIcon.SetActive(true);
OperateOutline.SetActive(true);
}
public void SecondOp()
{
OperateIcon.SetAlpha(1);
OperateOutline.SetAlpha(1);
OperateIcon.SetActive(true);
OperateOutline.SetActive(false);
}
public void ThirdOp()
{
OperateIcon.SetAlpha(0.5f);
OperateOutline.SetAlpha(0.5f);
OperateIcon.SetActive(true);
OperateOutline.SetActive(false);
}
public void CreateOp(int sequence)
{
float random = Random.Range(0f, 1f);
OperateBk.SetActive(true);
if (random <= 0.3333333f)
{
OpType = OpType.Rip;
}
else if (random <= 0.6666666f)
{
OpType = OpType.Water;
}
else
{
OpType = OpType.Fertilize;
}
if (sequence == 0)
{
FirstOp();
}
else if (sequence == 1)
{
SecondOp();
}
else
{
ThirdOp();
}
}
public void CreateOp(int sequence, OpType opType)
{
OpType = opType;
OperateBk.SetActive(true);
if (sequence == 0)
{
FirstOp();
}
else if (sequence == 1)
{
SecondOp();
}
else
{
ThirdOp();
}
}
public bool Operate(OpType opType)
{
if (opType != OpType) //操作错误
{
OperateBk.TweenForSr();
FlowerIcon.TweenForSr();
OperateIcon.TweenForSr();
OperateIcon.Shake(1, 3, new Vector3(0.2f, 0, 0), Curve.EaseOutQuad);
return false;
}
else //操作正确
{
ManaReso.GetHudText("得分+15", Color.white, 25, ChildDic["ScorePosTra"], ManaReso.Get("D_Status"), true);
ManaMiniGame.Score += 15;
PlayParticle();
OperateBk.TweenBacScale();
OperateBk.SetActive(false);
OperateIcon.SetActive(false);
OperateOutline.SetActive(false);
return true;
}
}
#endregion
public void PlayAnim(ObjType obj)
{
ElfList.Add(ManaReso.GetElf(this, obj));
}
public void PlayParticle()
{
ParticleAC.SetTrigger("Play");
}
public void GetAward()
{
PlayParticle();
ManaGarden.AwardValid = true;
int coin = Mathf.CeilToInt(ManaData.CoinPerson*Random.Range(0.05f, 0.08f)*ManaData.SkillPlus);
ManaData.Coin += coin;
ManaData.FlowerCoin++;
ManaReso.GetHudText("+" + coin, Color.white, 25, ChildDic["GoldPosTra"], ManaReso.Get("A_HudParent"), true);
GoldBk.SetActive(false);
}
public void ShowAward()
{
GoldBk.CreateTweenSr(new Color(1, 1, 1, 0), new Color(1, 1, 1, 1), 1f, true, true, Curve.EaseOutQuad);
GoldIcon.CreateTweenSr(new Color(1, 1, 1, 0), new Color(1, 1, 1, 1), 1f, true, true, Curve.EaseOutQuad);
GoldBk.SetY(transform.position.y + 2.5f);
GoldBk.TweenForSr();
GoldIcon.TweenForSr();
GoldBk.Move2D
(
GoldBk.transform.localPosition + new Vector3(0, 0.5f, 0),
1f,
true,
Curve.EaseOutQuad
);
}
public void OnPointerClick(PointerEventData eventData)
{
if (eventData.rawPointerPress.transform == transform)
{
ManaReso.Get("G_Flower").TweenForCG();
ManaGarden.ShowFlowerCard(FlowerInfo);
}
else if (eventData.rawPointerPress.transform == GoldBk)
{
Award = false;
}
}
}