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

396 lines
8.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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());
}
}
}
}