chicken_dy/Assets/WX-WASM-SDK/WXGameClubButton.cs

396 lines
8.5 KiB
C#
Raw Normal View History

2022-07-27 13:57:29 +00:00
using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System;
namespace WeChatWASM {
public class WXGameClubButton
{
#region C#JS桥接方法
#if UNITY_WEBGL
[DllImport("__Internal")]
#endif
private static extern void WXGameClubButtonDestroy(string id);
#if UNITY_WEBGL
[DllImport("__Internal")]
#endif
private static extern void WXGameClubButtonHide(string id);
#if UNITY_WEBGL
[DllImport("__Internal")]
#endif
private static extern void WXGameClubButtonSetProperty(string id, string key, string value);
#if UNITY_WEBGL
[DllImport("__Internal")]
#endif
private static extern void WXGameClubButtonShow(string id);
#if UNITY_WEBGL
[DllImport("__Internal")]
#endif
private static extern void WXGameClubButtonAddListener(string id, string key);
#if UNITY_WEBGL
[DllImport("__Internal")]
#endif
private static extern void WXGameClubButtonRemoveListener(string id, string key);
#endregion
public Hashtable ht = new Hashtable();
public string instanceId;
public WXGameClubButtonStyle style;
public static Dictionary<string, WXGameClubButton> Dict = new Dictionary<string, WXGameClubButton>();
private Action _onTap;
private GameClubButtonIcon _icon;
private GameClubButtonType _type;
private string _text;
private string _image;
#if UNITY_WEBGL && !UNITY_EDITOR
private static readonly bool isWebGL = true;
#else
private static readonly bool isWebGL = false;
#endif
public WXGameClubButton(string id, GameClubButtonStyle style)
{
instanceId = id;
this.style = new WXGameClubButtonStyle(id, style);
Dict.Add(id, this);
}
public GameClubButtonIcon icon
{
get
{
return _icon;
}
set
{
if (_type == GameClubButtonType.image) {
if (!isWebGL) {
ht["icon"] = value;
} else {
WXGameClubButtonSetProperty(instanceId, "icon", value.ToString());
}
_icon = value;
}
}
}
public GameClubButtonType type
{
get
{
return _type;
}
set
{
if (_type != value) {
if (!isWebGL) {
ht["type"] = value;
} else {
WXGameClubButtonSetProperty(instanceId, "type", value.ToString());
}
_type = value;
}
}
}
public string text
{
get
{
return _text;
}
set
{
if (_type == GameClubButtonType.text) {
if (!isWebGL) {
ht["text"] = value;
} else {
WXGameClubButtonSetProperty(instanceId, "text", value);
}
_text = value;
}
}
}
public string image
{
get
{
return _image;
}
set
{
if (_type == GameClubButtonType.image) {
if (!isWebGL) {
ht["image"] = value;
} else {
WXGameClubButtonSetProperty(instanceId, "image", value);
}
_image = value;
}
}
}
public WXGameClubButtonStyle styleObj
{
get
{
return style;
}
set
{
var props = value.GetType().GetProperties();
var styleProps = style.GetType().GetProperties();
// 遍历样式值,逐个设置
foreach (var prop in props)
{
foreach (var styleProp in styleProps)
{
// styleObj是原始对象不需要手动设置值
if (styleProp.Name == prop.Name && styleProp.Name != "styleObj") {
styleProp.SetValue(style, prop.GetValue(value));
}
}
}
}
}
public void Destroy()
{
if (isWebGL) {
WXGameClubButtonDestroy(instanceId);
} else {
Debug.Log("游戏圈按钮destroy");
}
Dict.Remove(instanceId);
}
public void Hide()
{
if (isWebGL) {
WXGameClubButtonHide(instanceId);
} else {
Debug.Log("游戏圈按钮hide");
}
}
public void Show()
{
if (isWebGL) {
WXGameClubButtonShow(instanceId);
} else {
Debug.Log("游戏圈按钮show");
}
}
public void OnTap(Action action)
{
if (_onTap == null) {
if (isWebGL) {
WXGameClubButtonAddListener(instanceId, "onTap");
}
}
_onTap += action;
}
public void OffTap(Action action = null)
{
if (action == null) {
_onTap = null;
}
else
{
_onTap -= action;
}
if (_onTap == null) {
if (isWebGL) {
WXGameClubButtonRemoveListener(instanceId, "offTap");
}
}
}
public void _HandleCallBack(string key)
{
switch (key) {
case "onTap":
_onTap?.Invoke();
break;
}
}
}
public class WXGameClubButtonStyle
{
private GameClubButtonStyle style;
private string instanceId;
public WXGameClubButtonStyle(string id, GameClubButtonStyle style)
{
instanceId = id;
this.style = style;
}
public GameClubButtonStyle styleObj
{
get
{
return style;
}
}
public int left
{
get
{
return style.left;
}
set
{
style.left = value;
WXSDKManagerHandler.Instance.GameClubStyleChangeInt(instanceId, "left", value);
}
}
public int top
{
get
{
return style.top;
}
set
{
style.top = value;
WXSDKManagerHandler.Instance.GameClubStyleChangeInt(instanceId, "top", value);
}
}
public int width
{
get
{
return style.width;
}
set
{
style.width = value;
WXSDKManagerHandler.Instance.GameClubStyleChangeInt(instanceId, "width", value);
}
}
public int height
{
get
{
return style.height;
}
set
{
style.height = value;
WXSDKManagerHandler.Instance.GameClubStyleChangeInt(instanceId, "height", value);
}
}
public int borderWidth
{
get
{
return style.borderWidth;
}
set
{
style.borderWidth = value;
WXSDKManagerHandler.Instance.GameClubStyleChangeInt(instanceId, "borderWidth", value);
}
}
public int borderRadius
{
get
{
return style.borderRadius;
}
set
{
style.borderRadius = value;
WXSDKManagerHandler.Instance.GameClubStyleChangeInt(instanceId, "borderRadius", value);
}
}
public int fontSize
{
get
{
return style.fontSize;
}
set
{
style.fontSize = value;
WXSDKManagerHandler.Instance.GameClubStyleChangeInt(instanceId, "fontSize", value);
}
}
public int lineHeight
{
get
{
return style.lineHeight;
}
set
{
style.lineHeight = value;
WXSDKManagerHandler.Instance.GameClubStyleChangeInt(instanceId, "lineHeight", value);
}
}
public string backgroundColor
{
get
{
return style.backgroundColor;
}
set
{
style.backgroundColor = value;
WXSDKManagerHandler.Instance.GameClubStyleChangeStr(instanceId, "backgroundColor", value);
}
}
public string borderColor
{
get
{
return style.borderColor;
}
set
{
style.borderColor = value;
WXSDKManagerHandler.Instance.GameClubStyleChangeStr(instanceId, "borderColor", value);
}
}
public string color
{
get
{
return style.color;
}
set
{
style.color = value;
WXSDKManagerHandler.Instance.GameClubStyleChangeStr(instanceId, "color", value);
}
}
public GameClubButtonTextAlign textAlign
{
get
{
return style.textAlign;
}
set
{
style.textAlign = value;
WXSDKManagerHandler.Instance.GameClubStyleChangeStr(instanceId, "textAlign", value.ToString());
}
}
}
}