Add BubbleText Logic

This commit is contained in:
Chomper9981
2026-04-13 14:44:16 +07:00
parent 08e5fc1d68
commit f083c400a0
42 changed files with 927 additions and 518 deletions
@@ -15,7 +15,7 @@ MonoBehaviour:
m_DefaultGroup: 712e3991f28e549e7a56ee582a977810
m_currentHash:
serializedVersion: 2
Hash: db1ead3a8d606fcdea388a6b9aba1229
Hash: 8b1cf1a0fcf68db7c872365ef6a9e916
m_OptimizeCatalogSize: 0
m_BuildRemoteCatalog: 0
m_CatalogRequestsTimeout: 0
@@ -15,6 +15,16 @@ MonoBehaviour:
m_GroupName: Default Local Group
m_GUID: 712e3991f28e549e7a56ee582a977810
m_SerializeEntries:
- m_GUID: 0a2f50f2fe381024996b30c94befd165
m_Address: "InGame/\u5143\u795E"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 11d9820773784714ba7ed00226308680
m_Address: "InGame/\u672A\u547D\u4E2D.tga"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 1b653230886be4009808803501ad7d7f
m_Address: Assets/PerfectWorld/SO/TaskTemplContainerSO.asset
m_ReadOnly: 0
@@ -30,16 +40,101 @@ MonoBehaviour:
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 2cea0a36514b40f4cbb2d93eb50fe97b
m_Address: "InGame/\u7ECF\u9A8C.tga"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 55f6d3d7b1dbf794fbaf5c8e8e057c31
m_Address: "InGame/\u65E0\u6548"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 66d520355c8214d8ba4d37422bd27571
m_Address: "InGame/GM\u6807\u5FD7"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 766835429f2a89f408d4786a3aa06363
m_Address: "InGame/\u514D\u75AB"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 7b66d105afe110341a51b5043be89f45
m_Address: "InGame/\u590D\u4EC7\u60E9\u6212"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 82bf5409dc0e9f34a9c114853cd8ee8d
m_Address: InGame/mp_warn.tga
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 8743a82a27870e5489e3bfca82cc3f0f
m_Address: "InGame/\u91D1\u94B1.tga"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 88e840e5dac12ed4383d994c7fadfef1
m_Address: "\u7A0B\u5E8F\u8054\u5165/\u51FB\u4E2D/\u62F3\u5957\u51FB\u4E2D"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 89a51fc0532e7c244bd25d996a480d1e
m_Address: "InGame/\u72B6\u6001\u95EA\u907F"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: a7cdab13e3d9e6a4da14a7bb02481f35
m_Address: "InGame/PK\u72B6\u6001\u6807\u8BB0"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: a81dab17b00ef4b4494a71ee88b10cc0
m_Address: "\u7A0B\u5E8F\u8054\u5165/\u89D2\u8272\u5347\u7EA7\u4EBA\u7C7B.gfx"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: b0860cc78fedf454c8ebf35729998d70
m_Address: "InGame/\u5931\u8D25"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: bd6cbd6a9c2ce8444a50a177bdfe77fd
m_Address: "InGame/\u7206\u51FB.tga"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: c1761dbd7108bf740a9fd5ee90d5e3de
m_Address: "InGame/\u53CD\u9707"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: ed347377914b065488cf5b42d4e8b5ab
m_Address: "InGame/\u5347\u7EA7\u4E86.tga"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: f55f5d3b9021e5d4daced587dbd48d9f
m_Address: "InGame/\u6210\u529F"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: f635ebcab3287284bb9e206ea8e13d51
m_Address: "InGame/\u590D\u4EC7\u955C\u50CF"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: fa244579aed36fa4187a0667d52ab84b
m_Address: "InGame/\u5438\u8840"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: fcbc44b68ce86c047bd67ea7a74d40c2
m_Address: InGame/hp_warn
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
m_ReadOnly: 0
m_Settings: {fileID: 11400000, guid: 070edb522e6e54c14a99055900003890, type: 2}
m_SchemaSet:
@@ -1,85 +0,0 @@
using UnityEngine;
using System.Collections.Generic;
using TMPro;
using DG.Tweening; // cần DOTween
public class DamageTextManager : MonoBehaviour
{
public static DamageTextManager Instance { get; private set; }
[Header("Prefab")]
[SerializeField] private TextMeshPro damageTextPrefab;
[Header("Settings")]
[SerializeField] private int poolSize = 20;
[SerializeField] private Vector3 offset = new Vector3(0, 2f, 0);
[SerializeField] private float riseDistance = 1.5f;
[SerializeField] private float riseDuration = 0.8f;
private readonly Queue<TextMeshPro> pool = new();
private void Awake()
{
// Singleton
if (Instance != null && Instance != this)
{
Destroy(gameObject);
return;
}
Instance = this;
DontDestroyOnLoad(gameObject);
// Tạo sẵn pool
for (int i = 0; i < poolSize; i++)
{
var textObj = Instantiate(damageTextPrefab, transform);
textObj.gameObject.SetActive(false);
pool.Enqueue(textObj);
}
}
/// <summary>
/// Gọi để spawn text damage
/// </summary>
public void ShowDamageText(Vector3 worldPos, int damage, Color color = default, float scale = 1f)
{
var text = GetFromPool();
text.text = damage.ToString();
text.color = color;
text.fontSize = 6;
text.transform.localScale = Vector3.one * scale;
Vector3 startPos = worldPos + offset;
text.transform.position = startPos;
text.gameObject.SetActive(true);
// Hiệu ứng bay lên + mờ dần
text.transform.DOMoveY(startPos.y + riseDistance, riseDuration).SetEase(Ease.OutQuad);
text.DOFade(0f, riseDuration)
.SetEase(Ease.InQuad)
.OnComplete(() =>
{
text.alpha = 1f;
text.gameObject.SetActive(false);
ReturnToPool(text);
});
}
private TextMeshPro GetFromPool()
{
if (pool.Count > 0)
{
return pool.Dequeue();
}
// Nếu hết pool, tạo thêm
var text = Instantiate(damageTextPrefab, transform);
text.gameObject.SetActive(false);
return text;
}
private void ReturnToPool(TextMeshPro text)
{
pool.Enqueue(text);
}
}
@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: e7981b037b60f4a4989ff59265a308ad
@@ -154,6 +154,7 @@ public partial class CECObject : MonoBehaviour
{
return EC_Utility.ToA3DVECTOR3(useTransform ? _objectTransform.position : objectPosition);
}
public Vector3 GetPosVector3(bool useTransform = true)
{
@@ -0,0 +1,242 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using TMPro;
using DG.Tweening; // cần DOTween
using BrewMonster.Scripts.UI.GamePlay;
public enum ImageResType
{
IMG_POPUPNUM = 0,
IMG_HITMISSED,
IMG_FACTION,
IMG_PATEQUEST,
IMG_LEVELUP,
IMG_GOTEXP,
IMG_GOTMONEY,
IMG_DEADLYSTRIKE,
IMG_GOTSP,
IMG_INVALIDHIT,
IMG_TEAMLEADER,
IMG_BOOTHBAR,
IMG_HPWARN,
IMG_MPWARN,
IMG_RETORT,
IMG_IMMUNE,
IMG_TEAMMATE,
IMG_PKSTATE,
IMG_GMFLAG,
IMG_ATTACKLOSE,
IMG_SUCCESS,
IMG_REBOUND,
IMG_BEAT_BACK,
IMG_ADD,
IMG_DODGE_DEBUFF,
IMG_KING,
NUM_IMAGE,
}
public class FLoatingTextManager : MonoBehaviour
{
public static FLoatingTextManager Instance { get; private set; }
[Header("Prefab")]
[SerializeField] private AUIFloatTextIcon floatTextIconPrefab;
[Header("Settings")]
[SerializeField] private int poolSize = 20;
[SerializeField] private Vector3 offset = new Vector3(0, 2f, 0);
[SerializeField] private float riseDistance = 1.5f;
[SerializeField] private float riseDuration = 0.8f;
/// <summary>
/// Minimum spacing between floating texts for the same source object (seconds).
/// 同一来源物体连续飘字的最小间隔(秒)。
/// </summary>
[SerializeField] private float staggerIntervalSeconds = 0.3f;
private readonly Queue<AUIFloatTextIcon> pool = new();
/// <summary>
/// Per-source next allowed show time (Unity instance ID → Time.time).
/// </summary>
private readonly Dictionary<int, float> _nextFloatingTextTimeBySourceId = new();
[Header("Sprite List")]
[SerializeField] private Dictionary<ImageResType, Sprite> imageDic = new Dictionary<ImageResType, Sprite>();
/// <summary>
/// Keeps Addressables handles alive so sprites in imageDic are not released.
/// 保留 Addressables 句柄,避免已加载的 Sprite 被卸载。
/// </summary>
private readonly List<AsyncOperationHandle<Sprite>> _spriteLoadHandles = new List<AsyncOperationHandle<Sprite>>();
private void Awake()
{
// Singleton
if (Instance != null && Instance != this)
{
Destroy(gameObject);
return;
}
Instance = this;
DontDestroyOnLoad(gameObject);
// Tạo sẵn pool
for (int i = 0; i < poolSize; i++)
{
var textObj = Instantiate(floatTextIconPrefab, transform);
textObj.gameObject.SetActive(false);
pool.Enqueue(textObj);
}
LoadAllImages();
}
private void OnDestroy()
{
foreach (var h in _spriteLoadHandles)
{
if (h.IsValid())
Addressables.Release(h);
}
_spriteLoadHandles.Clear();
}
/// <summary>
/// Gọi để spawn text damage
/// </summary>
/// <param name="sourceForStagger">If set, multiple calls for this object are spaced by <see cref="staggerIntervalSeconds"/>.</param>
public void ShowText(Vector3 worldPos, int damage, Color color = default, float scale = 1f, ImageResType imageResType = ImageResType.NUM_IMAGE, UnityEngine.Object sourceForStagger = null)
{
float delay = 0f;
UnityEngine.Object staggerSource = sourceForStagger;
if (staggerSource != null)
{
int key = staggerSource.GetInstanceID();
float now = Time.time;
if (!_nextFloatingTextTimeBySourceId.TryGetValue(key, out float nextSlot))
nextSlot = now;
float showAt = Mathf.Max(now, nextSlot);
delay = showAt - now;
_nextFloatingTextTimeBySourceId[key] = showAt + staggerIntervalSeconds;
}
void DoShow()
{
if (staggerSource != null && !staggerSource)
return;
var text = GetFromPool();
var imageShow = imageResType == ImageResType.NUM_IMAGE ? null : imageDic[imageResType];
if (damage > 0)
text.Show(worldPos, damage.ToString(), color, scale, riseDistance, riseDuration, imageShow, () => ReturnToPool(text));
else
text.Show(worldPos, "", color, scale, riseDistance, riseDuration, imageShow, () => ReturnToPool(text));
}
if (delay <= 0f)
DoShow();
else
DOVirtual.DelayedCall(delay, DoShow, false).SetTarget(this);
}
private AUIFloatTextIcon GetFromPool()
{
if (pool.Count > 0)
{
return pool.Dequeue();
}
// Nếu hết pool, tạo thêm
var text = Instantiate(floatTextIconPrefab, transform);
text.gameObject.SetActive(false);
return text;
}
private void ReturnToPool(AUIFloatTextIcon text)
{
pool.Enqueue(text);
}
public bool LoadAllImages()
{
LoadImage(ImageResType.IMG_HITMISSED, "InGame/未命中.tga");
LoadImage(ImageResType.IMG_LEVELUP, "InGame/升级了.tga");
LoadImage(ImageResType.IMG_GOTEXP, "InGame/经验.tga");
LoadImage(ImageResType.IMG_GOTMONEY, "InGame/金钱.tga");
LoadImage(ImageResType.IMG_DEADLYSTRIKE, "InGame/爆击.tga");
LoadImage(ImageResType.IMG_GOTSP, "InGame/元神.tga");
LoadImage(ImageResType.IMG_INVALIDHIT, "InGame/无效.tga");
//LoadImage(ImageResType.IMG_TEAMLEADER, "Window/LeaderMark.tga");
LoadImage(ImageResType.IMG_HPWARN, "InGame/hp_warn.tga");
LoadImage(ImageResType.IMG_MPWARN, "InGame/mp_warn.tga");
LoadImage(ImageResType.IMG_RETORT, "InGame/反震.tga");
LoadImage(ImageResType.IMG_IMMUNE, "InGame/免疫.tga");
//LoadImage(ImageResType.IMG_TEAMMATE, "Window/Teammate.tga");
LoadImage(ImageResType.IMG_PKSTATE, "InGame/PK状态标记.tga");
LoadImage(ImageResType.IMG_GMFLAG, "InGame/GM标志.dds");
LoadImage(ImageResType.IMG_ATTACKLOSE, "InGame/失败.tga");
LoadImage(ImageResType.IMG_SUCCESS, "InGame/成功.tga");
LoadImage(ImageResType.IMG_REBOUND, "InGame/复仇惩戒.tga");
LoadImage(ImageResType.IMG_BEAT_BACK, "InGame/复仇镜像.tga");
LoadImage(ImageResType.IMG_ADD, "InGame/吸血.tga");
LoadImage(ImageResType.IMG_DODGE_DEBUFF, "InGame/状态闪避.tga");
//LoadImage(ImageResType.IMG_KING, "King/皇冠图标.tga");
return false;
}
private void LoadImage(ImageResType type, string path)
{
if (string.IsNullOrEmpty(path))
return;
// Same normalization as skill/gfx paths (PC backslashes → Addressables-style slashes).
// 与技能 gfx 路径一致:反斜杠转为斜杠,便于与 Addressables 地址对齐。
string normalized = path.Replace('\\', '/');
IReadOnlyList<string> candidates = BuildSpriteAddressCandidates(normalized);
foreach (string address in candidates)
{
var handle = Addressables.LoadAssetAsync<Sprite>(address);
handle.WaitForCompletion();
if (handle.Status == AsyncOperationStatus.Succeeded && handle.Result != null)
{
imageDic[type] = handle.Result;
_spriteLoadHandles.Add(handle);
return;
}
if (handle.IsValid())
Addressables.Release(handle);
}
Debug.Log($"[FLoatingTextManager] Sprite load failed for {type}. Addressables keys must match the catalog exactly; " +
$"tried: {string.Join("; ", candidates)}. " +
$"Similar file names are not auto-resolved (unlike fuzzy file search).");
}
/// <summary>
/// Addressables uses exact string addresses. Imported UI art may drop .tga/.dds in the key; try those variants.
/// Addressables 为精确字符串地址;导入后地址可能没有 .tga/.dds 等后缀,依次尝试这些候选。
/// </summary>
private static List<string> BuildSpriteAddressCandidates(string path)
{
var list = new List<string> { path };
void addUnique(string s)
{
if (!string.IsNullOrEmpty(s) && !list.Contains(s))
list.Add(s);
}
string[] sourceExtensions = { ".tga", ".dds", ".bmp", ".png", ".jpg", ".jpeg" };
foreach (string ext in sourceExtensions)
{
if (path.EndsWith(ext, StringComparison.OrdinalIgnoreCase))
{
addUnique(path.Substring(0, path.Length - ext.Length));
break;
}
}
return list;
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 8635fe618431341d796413e99407c5fc
+197 -34
View File
@@ -2044,13 +2044,12 @@ namespace BrewMonster
{
if (nDamage == -2)
{
// this message is caused by a help skill, so don't use a wounded action here
/* if (dwModifier & CECAttackEvent::MOD_IMMUNE)
BubbleText(BUBBLE_IMMUNE, 0);
else if (dwModifier & CECAttackEvent::MOD_NULLITY)
BubbleText(BUBBLE_INVALIDHIT, 0);
else if (dwModifier & CECAttackEvent::MOD_DODGE_DEBUFF)
BubbleText(BUBBLE_DODGE_DEBUFF, 0);*/
if ((dwModifier & (uint)MOD.MOD_IMMUNE) != 0)
BubbleText((int)BubbleTextType.BUBBLE_IMMUNE, 0);
else if ((dwModifier & (uint)MOD.MOD_NULLITY) != 0)
BubbleText((int)BubbleTextType.BUBBLE_INVALIDHIT, 0);
else if ((dwModifier & (uint)MOD.MOD_DODGE_DEBUFF) != 0)
BubbleText((int)BubbleTextType.BUBBLE_DODGE_DEBUFF, 0);
}
else if (nDamage == -1)
{
@@ -2058,14 +2057,14 @@ namespace BrewMonster
// Just play a wounded action
if (!OnDamaged(skill))
{
// PlayAction((int)PLAYER_ACTION_TYPE.ACT_WOUNDED);
PlayAction((int)PLAYER_ACTION_TYPE.ACT_WOUNDED);
}
/*if (dwModifier & CECAttackEvent::MOD_IMMUNE)
BubbleText(BUBBLE_IMMUNE, 0);
else if (dwModifier & CECAttackEvent::MOD_NULLITY)
BubbleText(BUBBLE_INVALIDHIT, 0);
else if (dwModifier & CECAttackEvent::MOD_DODGE_DEBUFF)
BubbleText(BUBBLE_DODGE_DEBUFF, 0);*/
if ((dwModifier & (uint)MOD.MOD_IMMUNE) != 0)
BubbleText((int)BubbleTextType.BUBBLE_IMMUNE, 0);
else if ((dwModifier & (uint)MOD.MOD_NULLITY) != 0)
BubbleText((int)BubbleTextType.BUBBLE_INVALIDHIT, 0);
else if ((dwModifier & (uint)MOD.MOD_DODGE_DEBUFF) != 0)
BubbleText((int)BubbleTextType.BUBBLE_DODGE_DEBUFF, 0);
}
else
{
@@ -2073,34 +2072,178 @@ namespace BrewMonster
if (nDamage > 0)
{
int p1 = 0;
/*if (dwModifier & CECAttackEvent::MOD_CRITICAL_STRIKE)
if ((dwModifier & (int)MOD.MOD_CRITICAL_STRIKE) != 0)
p1 |= 0x0001;
if (dwModifier & CECAttackEvent::MOD_RETORT)
p1 |= 0x0002;*/
if ((dwModifier & (uint)MOD.MOD_RETORT) != 0)
p1 |= 0x0002;
if (!OnDamaged(skill))
// PlayAction((int)PLAYER_ACTION_TYPE.ACT_WOUNDED);
PlayAction((int)PLAYER_ACTION_TYPE.ACT_WOUNDED);
DamageTextManager.Instance.ShowDamageText(
transform.position, nDamage, Color.yellow, 1.0f);
/* if (dwModifier & CECAttackEvent::MOD_IMMUNE)
BubbleText(BUBBLE_IMMUNE, 0);
else if (dwModifier & CECAttackEvent::MOD_REBOUND)
BubbleText(BUBBLE_REBOUND, nDamage);
else if (dwModifier & CECAttackEvent::MOD_BEAT_BACK)
BubbleText(BUBBLE_BEAT_BACK, nDamage);
else
BubbleText(BUBBLE_DAMAGE, nDamage, p1);*/
if ((dwModifier & (uint)MOD.MOD_IMMUNE) != 0)
BubbleText((int)BubbleTextType.BUBBLE_IMMUNE, 0);
else if ((dwModifier & (uint)MOD.MOD_REBOUND) != 0)
BubbleText((int)BubbleTextType.BUBBLE_REBOUND, (uint)nDamage);
else if ((dwModifier & (uint)MOD.MOD_BEAT_BACK) != 0)
BubbleText((int)BubbleTextType.BUBBLE_BEAT_BACK, (uint)nDamage);
else
BubbleText((int)BubbleTextType.BUBBLE_DAMAGE, (uint)nDamage, p1);
}
/* else if (dwModifier & CECAttackEvent::MOD_IMMUNE)
BubbleText(BUBBLE_IMMUNE, 0);
else if (dwModifier & CECAttackEvent::MOD_NULLITY)
BubbleText(BUBBLE_INVALIDHIT, 0);
else if ((dwModifier & (uint)MOD.MOD_IMMUNE) != 0)
BubbleText((int)BubbleTextType.BUBBLE_IMMUNE, 0);
else if ((dwModifier & (uint)MOD.MOD_NULLITY) != 0)
BubbleText((int)BubbleTextType.BUBBLE_INVALIDHIT, 0);
else
BubbleText(BUBBLE_HITMISSED, 0);*/
BubbleText((int)BubbleTextType.BUBBLE_HITMISSED, 0);
}
}
public void BubbleText(int iIndex, uint dwNum, int p1 = 0)
{
bool bHost = IsHostPlayer();
// if (iIndex == BUBBLE_EXP || iIndex == BUBBLE_SP)
// bHost = false;
Color dwCol = new Color(255, 205, 75);
if (bHost)
{
var pGameRun = EC_Game.GetGameRun();
CECHostPlayer pHost = pGameRun?.GetHostPlayer();
if (iIndex == (int)BubbleTextType.BUBBLE_EXP)
{
bool hasBookExp = pHost != null && pHost.IsReincarnationTomeActive;
int msgId = (int)dwNum > 0
? (hasBookExp ? (int)FixedMsg.FIXMSG_GOT_BOOKEXP : (int)FixedMsg.FIXMSG_GOTEXP)
: (int)FixedMsg.FIXMSG_LOSTEXP;
pGameRun?.AddFixedChannelMsg(msgId, (int)ChatChannel.GP_CHAT_FIGHT, (int)dwNum);
}
if (iIndex == (int)BubbleTextType.BUBBLE_SP)
pGameRun?.AddFixedChannelMsg((int)FixedMsg.FIXMSG_GOTSP, (int)ChatChannel.GP_CHAT_FIGHT, (int)dwNum);
if (iIndex == (int)BubbleTextType.BUBBLE_REALMEXP)
pGameRun?.AddFixedChannelMsg((int)FixedMsg.FIXMSG_GOT_REALMEXP, (int)ChatChannel.GP_CHAT_FIGHT, (int)dwNum);
}
// Chariot / mount (C++): raise bubble by mount dummy AABB * 2.3f. IsInChariot() lives on CECHostPlayer; wire via override or protected hook when ready.
// if (IsInChariot())
// {
// var dummy = GetDummyModel((int)PLAYERMODEL_TYPE.PLAYERMODEL_DUMMYTYPE2);
// if (dummy != null)
// vPos = GetPosVector3() + g_vAxisY * (dummy.GetModelAABB().Extents.y * 2.3f);
// else
// vPos = GetPosVector3() + g_vAxisY * (m_aabb.Extents.y * 2.5f);
// }
// else
// vPos = GetPosVector3() + g_vAxisY * (m_aabb.Extents.y * 2.5f);
Vector3 vPos = GetPosVector3() + g_vAxisY * (m_aabb.Extents.y * 2.5f);
ImageResType bubbleTextType = ImageResType.NUM_IMAGE;
switch (iIndex)
{
case (int)BubbleTextType.BUBBLE_DAMAGE:
if (!bHost)
dwCol = new Color(237, 56, 0);
if ((p1 & 0x0001) != 0)
bubbleTextType = ImageResType.IMG_DEADLYSTRIKE;
else if ((p1 & 0x0002) != 0)
bubbleTextType = ImageResType.IMG_RETORT;
break;
case (int)BubbleTextType.BUBBLE_EXP:
bubbleTextType = ImageResType.IMG_GOTEXP;
// pDecal->SetScreenPos(80, 70);
// pDecal->EnableScreenPos(true);
break;
case (int)BubbleTextType.BUBBLE_SP:
bubbleTextType = ImageResType.IMG_GOTSP;
// pDecal->SetScreenPos(80, 90);
// pDecal->EnableScreenPos(true);
break;
case (int)BubbleTextType.BUBBLE_MONEY:
bubbleTextType = ImageResType.IMG_GOTMONEY;
break;
case (int)BubbleTextType.BUBBLE_LEVELUP:
bubbleTextType = ImageResType.IMG_LEVELUP;
break;
case (int)BubbleTextType.BUBBLE_HITMISSED:
if (!bHost)
dwCol = new Color(237, 56, 0);
bubbleTextType = ImageResType.IMG_HITMISSED;
break;
case (int)BubbleTextType.BUBBLE_INVALIDHIT:
if (!bHost)
dwCol = new Color(237, 56, 0);
bubbleTextType = ImageResType.IMG_INVALIDHIT;
break;
case (int)BubbleTextType.BUBBLE_IMMUNE:
if (!bHost)
dwCol = new Color(237, 56, 0);
bubbleTextType = ImageResType.IMG_IMMUNE;
break;
case (int)BubbleTextType.BUBBLE_HPWARN:
dwCol = new Color(255, 255, 255);
bubbleTextType = ImageResType.IMG_HPWARN;
break;
case (int)BubbleTextType.BUBBLE_MPWARN:
dwCol = new Color(255, 255, 255);
bubbleTextType = ImageResType.IMG_MPWARN;
break;
case (int)BubbleTextType.BUBBLE_REBOUND:
bubbleTextType = ImageResType.IMG_REBOUND;
break;
case (int)BubbleTextType.BUBBLE_BEAT_BACK:
bubbleTextType = ImageResType.IMG_BEAT_BACK;
break;
case (int)BubbleTextType.BUBBLE_ADD:
dwCol = new Color(126, 206, 244);
bubbleTextType = ImageResType.IMG_ADD;
break;
case (int)BubbleTextType.BUBBLE_DODGE_DEBUFF:
if (!bHost)
dwCol = new Color(237, 56, 0);
bubbleTextType = ImageResType.IMG_DODGE_DEBUFF;
break;
default:
bubbleTextType = ImageResType.NUM_IMAGE;
break;
}
FLoatingTextManager.Instance.ShowText(vPos, (int)dwNum, dwCol, 1f, bubbleTextType, this);
}
public void StopSkillAttackAction()
{
if (m_pActionController != null)
@@ -3894,6 +4037,26 @@ namespace BrewMonster
WINGTYPE_FLYSWORD, // 飞行器类型:飞剑
WINGTYPE_DOUBLEWHEEL, // 飞行器类型:双脚飞行器
};
// Bubble text
public enum BubbleTextType
{
BUBBLE_DAMAGE = 0,
BUBBLE_EXP,
BUBBLE_SP,
BUBBLE_MONEY,
BUBBLE_LEVELUP,
BUBBLE_HITMISSED,
BUBBLE_INVALIDHIT,
BUBBLE_IMMUNE,
BUBBLE_HPWARN,
BUBBLE_MPWARN,
BUBBLE_REBOUND, //
BUBBLE_BEAT_BACK, //
BUBBLE_ADD, // ѪļӺ
BUBBLE_DODGE_DEBUFF,
BUBBLE_REALMEXP,
BUBBLE_NUM,
};
public struct PVPINFO
{
public bool bEnable; // PVP switch
+97 -36
View File
@@ -8,7 +8,6 @@ using System;
using System.Threading.Tasks;
using BrewMonster.Scripts.Chat;
using UnityEngine;
public class CECNPC : CECObject
{
[SerializeField] protected INFO m_NPCInfo;
@@ -824,58 +823,105 @@ public class CECNPC : CECObject
// so if iDamage is -1 we will shoud the wounded animation
if (iDamage == -1 && !m_bStartFight)
PlayModelAction((int)NPCActionIndex.ACT_WOUNDED);
DamageTextManager.Instance.ShowDamageText(transform.position, iDamage, Color.red, 1.0f);
FLoatingTextManager.Instance.ShowText(transform.position, iDamage, Color.red, 1.0f, ImageResType.NUM_IMAGE, this);
/*if ((dwModifier & (uint)MOD.MOD_IMMUNE) != 0 *//* && !IsImmuneDisable()*//*)
textma
else if (dwModifier & CECAttackEvent::MOD_NULLITY)
BubbleText(BUBBLE_INVALIDHIT, 0);
else if (dwModifier & CECAttackEvent::MOD_ENCHANT_FAILED)
BubbleText(BUBBLE_LOSE, 0);
else if (dwModifier & CECAttackEvent::MOD_SUCCESS)
BubbleText(BUBBLE_SUCCESS, 0);
else if (dwModifier & CECAttackEvent::MOD_DODGE_DEBUFF)
BubbleText(BUBBLE_DODGE_DEBUFF, 0);*/
if ((dwModifier & (uint)MOD.MOD_IMMUNE) != 0 /* && !IsImmuneDisable()*/)
BubbleText((int)MOD.MOD_IMMUNE, 0);
else if ((dwModifier & (uint)MOD.MOD_NULLITY) != 0)
BubbleText((int)MOD.MOD_NULLITY, 0);
else if ((dwModifier & (uint)MOD.MOD_ENCHANT_FAILED) != 0)
BubbleText((int)MOD.MOD_ENCHANT_FAILED, 0);
else if ((dwModifier & (uint)MOD.MOD_SUCCESS) != 0)
BubbleText((int)MOD.MOD_SUCCESS, 0);
else if ((dwModifier & (uint)MOD.MOD_DODGE_DEBUFF) != 0)
BubbleText((int)MOD.MOD_DODGE_DEBUFF, 0);
}
else
{
// this message is related to the host, so we should show a pop up message
// Popup a damage decal
/* bool bDeadlyStrike = (dwModifier & CECAttackEvent::MOD_CRITICAL_STRIKE) ? true : false;
bool bRetort = (dwModifier & CECAttackEvent::MOD_RETORT) ? true : false;*/
bool bDeadlyStrike = (dwModifier & (uint)MOD.MOD_CRITICAL_STRIKE) != 0;
bool bRetort = (dwModifier & (uint)MOD.MOD_RETORT) != 0;
if (iDamage > 0)
{
if (!m_bStartFight)
PlayModelAction((int)NPCActionIndex.ACT_WOUNDED);
DamageTextManager.Instance.ShowDamageText(transform.position, iDamage, Color.red, 1.0f);
/* int p1 = 0;
if (bDeadlyStrike)
p1 |= 0x0001;
else if (bRetort)
p1 |= 0x0002;*/
// Damage number + tint/icons: BubbleText → ShowText only (avoid duplicate red plain text + orange BubbleText).
// 伤害数字与图标只走 BubbleText,避免先红字再橙字飘两次。
int p1 = 0;
if (bDeadlyStrike)
p1 |= 0x0001;
else if (bRetort)
p1 |= 0x0002;
/* if (dwModifier & CECAttackEvent::MOD_REBOUND)
BubbleText(BUBBLE_REBOUND, (DWORD)iDamage);
else if (dwModifier & CECAttackEvent::MOD_BEAT_BACK)
BubbleText(BUBBLE_BEAT_BACK, (DWORD)iDamage);
else
BubbleText(BUBBLE_DAMAGE, (DWORD)iDamage, p1);*/
if ((dwModifier & (uint)MOD.MOD_REBOUND) != 0)
BubbleText((int)BubbleTextType.BUBBLE_REBOUND, iDamage);
else if ((dwModifier & (uint)MOD.MOD_BEAT_BACK) != 0)
BubbleText((int)BubbleTextType.BUBBLE_BEAT_BACK, iDamage);
else
BubbleText((int)BubbleTextType.BUBBLE_DAMAGE, iDamage, p1);
}
/* else if ((dwModifier & CECAttackEvent::MOD_IMMUNE) && !IsImmuneDisable())
BubbleText(BUBBLE_IMMUNE, 0);
else if (dwModifier & CECAttackEvent::MOD_NULLITY)
BubbleText(BUBBLE_INVALIDHIT, 0);
else if (dwModifier & CECAttackEvent::MOD_ENCHANT_FAILED)
BubbleText(BUBBLE_LOSE, 0);
else if (dwModifier & CECAttackEvent::MOD_SUCCESS)
BubbleText(BUBBLE_SUCCESS, 0);
else if ((dwModifier & (uint)MOD.MOD_IMMUNE) != 0 /*&& !IsImmuneDisable()*/)
BubbleText((int)BubbleTextType.BUBBLE_IMMUNE, 0);
else if ((dwModifier & (uint)MOD.MOD_NULLITY) != 0)
BubbleText((int)BubbleTextType.BUBBLE_INVALIDHIT, 0);
else if ((dwModifier & (uint)MOD.MOD_ENCHANT_FAILED) != 0)
BubbleText((int)BubbleTextType.BUBBLE_LOSE, 0);
else if ((dwModifier & (uint)MOD.MOD_SUCCESS) != 0)
BubbleText((int)BubbleTextType.BUBBLE_SUCCESS, 0);
else
BubbleText(BUBBLE_HITMISSED, 0);*/
BubbleText((int)BubbleTextType.BUBBLE_HITMISSED, 0);
}
}
public void BubbleText(int iIndex, int dwNum, int p1 = 0/* 0 */)
{
//FLoatingTextManager.Instance.ShowText(transform.position, dwNum, Color.red, 1.0f, (uint)iIndex);
Color displayColor = new Color(237, 56, 0);
ImageResType imageResType = ImageResType.NUM_IMAGE;
switch (iIndex)
{
case (int)BubbleTextType.BUBBLE_DAMAGE:
if ((p1 & 0x0001) != 0)
imageResType = ImageResType.IMG_DEADLYSTRIKE;
else if ((p1 & 0x0002) != 0)
imageResType = ImageResType.IMG_RETORT;
break;
case (int)BubbleTextType.BUBBLE_HITMISSED:
imageResType = ImageResType.IMG_HITMISSED;
break;
case (int)BubbleTextType.BUBBLE_INVALIDHIT:
imageResType = ImageResType.IMG_INVALIDHIT;
break;
case (int)BubbleTextType.BUBBLE_IMMUNE:
imageResType = ImageResType.IMG_IMMUNE;
break;
case (int)BubbleTextType.BUBBLE_HPWARN:
imageResType = ImageResType.IMG_HPWARN;
break;
case (int)BubbleTextType.BUBBLE_LOSE:
imageResType = ImageResType.IMG_ATTACKLOSE;
break;
case (int)BubbleTextType.BUBBLE_SUCCESS:
imageResType = ImageResType.IMG_SUCCESS;
break;
case (int)BubbleTextType.BUBBLE_REBOUND:
imageResType = ImageResType.IMG_REBOUND;
break;
case (int)BubbleTextType.BUBBLE_BEAT_BACK:
imageResType = ImageResType.IMG_BEAT_BACK;
break;
case (int)BubbleTextType.BUBBLE_DODGE_DEBUFF:
imageResType = ImageResType.IMG_DODGE_DEBUFF;
break;
default:
imageResType = ImageResType.NUM_IMAGE;
break;
}
FLoatingTextManager.Instance.ShowText(transform.position, dwNum, displayColor, 1.0f, imageResType, this);
}
public void WorkFinished(int iWorkID)
{
// Note: below judge can prevent many problems when we attempt to
@@ -1710,6 +1756,19 @@ public class CECNPC : CECObject
CECModel model = GetModel();
return model?.GetHook(hookName, recursive);
}
public enum BubbleTextType
{
BUBBLE_DAMAGE = 0,
BUBBLE_HITMISSED,
BUBBLE_INVALIDHIT,
BUBBLE_IMMUNE,
BUBBLE_HPWARN,
BUBBLE_LOSE,
BUBBLE_SUCCESS,
BUBBLE_REBOUND, //
BUBBLE_BEAT_BACK, //
BUBBLE_DODGE_DEBUFF,
};
}
public struct ClearComActFlagEvent
{
@@ -1777,6 +1836,8 @@ public enum NPCActionIndex
ACT_WOUNDED2,
ACT_MAX,
};
//BUBBLE TEXT TYPE FOR NPC. HOST IS DIFFERENT FROM NPC.
public ref struct ByteReader
{
private ReadOnlySpan<byte> _span;
@@ -2973,5 +2973,11 @@ namespace CSNetwork.GPDataType
{
public int id; // self id or pet id.
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct cmd_receive_exp
{
public int exp;
public int sp;
};
}
@@ -1290,6 +1290,9 @@ namespace CSNetwork
break;
}
case CommandID.RECEIVE_EXP:
EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_RECEIVEEXP, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
break;
case CommandID.LEVEL_UP:
{
cmd_level_up pCmdLevelUp = GPDataTypeHelper.FromBytes<cmd_level_up>(pDataBuf); ;
@@ -480,6 +480,7 @@ namespace BrewMonster
}
break;
}
case CommandID.PET_REBUILD_INHERIT_START:
case CommandID.PET_REBUILD_INHERIT_INFO:
case CommandID.PET_REBUILD_INHERIT_END:
@@ -568,6 +569,35 @@ namespace BrewMonster
}
}
}
void OnMsgHstReceiveExp (ECMSG Msg)
{
cmd_receive_exp pCmd = GPDataTypeHelper.FromBytes<cmd_receive_exp>((byte[])Msg.dwParam1);
if (m_ReincarnationTome.tome_active != 0) {
//dunno what it do "?
// m_ReincarnationTome.tome_exp += pCmd.exp;
// CECGameUIMan pGameUI = EC_Game.GetGameRun().GetUIManager().GetInGameUIMan();
// CDlgReincarnationBook* pDlgBook = dynamic_cast<CDlgReincarnationBook*>(pGameUI->GetDialog("Win_ReincarnationBook"));
// if (pDlgBook && pDlgBook->IsShow()) pDlgBook->Update();
// CDlgReincarnationRewrite* pDlgRewrite = dynamic_cast<CDlgReincarnationRewrite*>(pGameUI->GetDialog("Win_ReincarnationRewrite"));
// if (pDlgRewrite && pDlgRewrite->IsShow()) pDlgRewrite->Update();
}
if (pCmd.exp != 0)
{
// Print notify text
// g_pGame->GetGameRun()->AddFixedMessage(pCmd->exp > 0 ? FIXMSG_GOTEXP : FIXMSG_LOSTEXP, (int)pCmd->exp);
BubbleText((int)BubbleTextType.BUBBLE_EXP, (uint)pCmd.exp);
}
if (pCmd.sp > 0)
{
// Print notify text
// g_pGame->GetGameRun()->AddFixedMessage(FIXMSG_GOTSP, (int)pCmd->sp);
BubbleText((int)BubbleTextType.BUBBLE_SP, (uint)pCmd.sp);
}
}
}
}
@@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using TMPro;
using DG.Tweening; // cần DOTween
using BrewMonster.Scripts.UI.GamePlay;
using UnityEngine.UI;
namespace BrewMonster.Scripts.UI.GamePlay
{
public class AUIFloatTextIcon : MonoBehaviour
{
[SerializeField] TMP_Text text;
[SerializeField] SpriteRenderer ingameIcon;
public void Show(Vector3 worldPos, string damage, Color color = default, float scale = 1f, float riseDistance = 1f, float riseDuration = 1f, Sprite sprite = null, Action onComplete = null)
{
if(sprite != null)
{
ingameIcon.sprite = sprite;
ingameIcon.gameObject.SetActive(true);
}
else
{
ingameIcon.gameObject.SetActive(false);
}
text.text = damage;
text.color = color;
text.fontSize = 6;
text.transform.localScale = Vector3.one * scale;
text.transform.position = worldPos;
gameObject.SetActive(true);
// Hiệu ứng bay lên + mờ dần
text.transform.DOMoveY(worldPos.y + riseDistance, riseDuration).SetEase(Ease.OutQuad);
text.DOFade(0f, riseDuration)
.SetEase(Ease.InQuad)
.OnComplete(() =>
{
text.alpha = 1f;
text.gameObject.SetActive(false);
onComplete?.Invoke();
});
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 0515aed5525ee47d4b5249804a555471
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -139,7 +139,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -40,10 +40,10 @@ TextureImporter:
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -54,7 +54,7 @@ TextureImporter:
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -40,10 +40,10 @@ TextureImporter:
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -54,7 +54,7 @@ TextureImporter:
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -40,10 +40,10 @@ TextureImporter:
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -54,7 +54,7 @@ TextureImporter:
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -6,7 +6,7 @@ TextureImporter:
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
@@ -37,13 +37,13 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 0
wrapV: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
@@ -40,10 +40,10 @@ TextureImporter:
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
@@ -54,7 +54,7 @@ TextureImporter:
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -126,7 +126,7 @@ TextureImporter:
customData:
physicsShape: []
bones: []
spriteID:
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
+4 -160
View File
@@ -101,6 +101,8 @@ namespace BrewMonster
public A3DVECTOR3 m_vAccel; // Accelerate\
public byte m_RealmLevel;
REINCARNATION_TOME m_ReincarnationTome; // תÉú
/// <summary>Used by <see cref="CECPlayer.BubbleText"/> for fight-channel EXP strings (book vs normal).</summary>
internal bool IsReincarnationTomeActive => m_ReincarnationTome.tome_active != 0;
public bool m_bRushFly = false; // true, in rush fly mode
private CECCounter m_IncantCnt;
@@ -614,7 +616,7 @@ namespace BrewMonster
case EC_MsgDef.MSG_PM_PLAYERCHGSHAPE : OnMsgPlayerChgShape(Msg); break;
case EC_MsgDef.MSG_HST_SETMOVESTAMP: OnMsgHstSetMoveStamp(Msg); break;
case EC_MsgDef.MSG_HST_SANCTUARY: OnMsgHstSanctuary(Msg); break;
case EC_MsgDef.MSG_HST_RECEIVEEXP: OnMsgHstReceiveExp(Msg); break;
default:
// Uncomment to debug unhandled messages
// Debug.LogWarning($"[CECHostPlayer] ProcessMessage: Unhandled message {msg}");
@@ -664,164 +666,6 @@ namespace BrewMonster
AddMoneyAmount(-(int)pCmd.cost);
}
private void BubbleText(int iIndex, uint dwNum, int p1 = 0)
{
bool isHost = IsHostPlayer();
if (isHost)
{
CECHostPlayer pHost = EC_Game.GetGameRun().GetHostPlayer();
if (iIndex == (int)BubbleTextType.BUBBLE_EXP)
{
bool hasBookExp = pHost != null && pHost.m_ReincarnationTome.tome_active != 0;
int msgId = (int)dwNum > 0 ?
(hasBookExp ? (int)FixedMsg.FIXMSG_GOT_BOOKEXP : (int)FixedMsg.FIXMSG_GOTEXP) :
(int)FixedMsg.FIXMSG_LOSTEXP;
EC_Game.GetGameRun()?.AddFixedChannelMsg(msgId, (int)ChatChannel.GP_CHAT_FIGHT, (int)dwNum);
}
if (iIndex == (int)BubbleTextType.BUBBLE_SP)
{
EC_Game.GetGameRun()?.AddFixedChannelMsg((int)FixedMsg.FIXMSG_GOTSP, (int)ChatChannel.GP_CHAT_FIGHT, (int)dwNum);
}
if (iIndex == (int)BubbleTextType.BUBBLE_REALMEXP)
{
EC_Game.GetGameRun()?.AddFixedChannelMsg((int)FixedMsg.FIXMSG_GOT_REALMEXP, (int)ChatChannel.GP_CHAT_FIGHT, (int)dwNum);
}
}
Vector3 vPos;
if (IsInChariot())
{
var dummy = GetDummyModel((int)PLAYERMODEL_TYPE.PLAYERMODEL_DUMMYTYPE2);
if (dummy != null)
{
// TODO
//vPos = GetPos() + g_vAxisY * (dummy.GetModelAABB().Extents.y * 2.3f);
}
else
{
vPos = EC_Utility.ToVector3(GetPos()) + g_vAxisY * (m_aabb.Extents.y * 2.5f);
}
//CECBubbleDecal* pBubbleDecal = m_pBubbleTexts->AddDecal(vPos, CECDecal::DCID_ICONDECAL);
//CECIconDecal* pDecal = (CECIconDecal*)pBubbleDecal->GetDecal();
//switch (iIndex)
//{
// case BUBBLE_DAMAGE:
// if (!bHost)
// dwCol = A3DCOLORRGB(237, 56, 0);
// if (p1 & 0x0001)
// pDecal->AddIcon(CECImageRes::IMG_DEADLYSTRIKE, 0, dwCol);
// else if (p1 & 0x0002)
// pDecal->AddIcon(CECImageRes::IMG_RETORT, 0, dwCol);
// pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
// break;
// case BUBBLE_EXP:
// pDecal->AddIcon(CECImageRes::IMG_GOTEXP, 0, dwCol);
// pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
// // pDecal->SetScreenPos(80, 70);
// // pDecal->EnableScreenPos(true);
// break;
// case BUBBLE_SP:
// pDecal->AddIcon(CECImageRes::IMG_GOTSP, 0, dwCol);
// pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
// // pDecal->SetScreenPos(80, 90);
// // pDecal->EnableScreenPos(true);
// break;
// case BUBBLE_MONEY:
// pDecal->AddIcon(CECImageRes::IMG_GOTMONEY, 0, dwCol);
// pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
// break;
// case BUBBLE_LEVELUP:
// pDecal->AddIcon(CECImageRes::IMG_LEVELUP, 0, dwCol);
// break;
// case BUBBLE_HITMISSED:
// if (!bHost)
// dwCol = A3DCOLORRGB(237, 56, 0);
// pDecal->AddIcon(CECImageRes::IMG_HITMISSED, 0, dwCol);
// break;
// case BUBBLE_INVALIDHIT:
// if (!bHost)
// dwCol = A3DCOLORRGB(237, 56, 0);
// pDecal->AddIcon(CECImageRes::IMG_INVALIDHIT, 0, dwCol);
// break;
// case BUBBLE_IMMUNE:
// if (!bHost)
// dwCol = A3DCOLORRGB(237, 56, 0);
// pDecal->AddIcon(CECImageRes::IMG_IMMUNE, 0, dwCol);
// break;
// case BUBBLE_HPWARN:
// dwCol = A3DCOLORRGB(255, 255, 255);
// pDecal->AddIcon(CECImageRes::IMG_HPWARN, 0, dwCol);
// break;
// case BUBBLE_MPWARN:
// dwCol = A3DCOLORRGB(255, 255, 255);
// pDecal->AddIcon(CECImageRes::IMG_MPWARN, 0, dwCol);
// break;
// case BUBBLE_REBOUND:
// pDecal->AddIcon(CECImageRes::IMG_REBOUND, 0, dwCol);
// pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
// break;
// case BUBBLE_BEAT_BACK:
// pDecal->AddIcon(CECImageRes::IMG_BEAT_BACK, 0, dwCol);
// pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
// break;
// case BUBBLE_ADD:
// dwCol = A3DCOLORRGB(126, 206, 244);
// pDecal->AddIcon(CECImageRes::IMG_ADD, 0, dwCol);
// pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
// break;
// case BUBBLE_DODGE_DEBUFF:
// if (!bHost)
// dwCol = A3DCOLORRGB(237, 56, 0);
// pDecal->AddIcon(CECImageRes::IMG_DODGE_DEBUFF, 0, dwCol);
// break;
// default:
// return;
}
else
{
vPos = EC_Utility.ToVector3(GetPos()) + g_vAxisY * (m_aabb.Extents.y * 2.5f);
}
}
/// <summary>
/// Sell to NPC: server sends ITEM_TO_MONEY. Removes sold items from pack and adds gained money.
/// Payload layout differs across server builds, so we parse defensively.
@@ -3084,7 +2928,7 @@ namespace BrewMonster
EventBus.Publish(new HostPlayerLevelUpUIEvent());
// // Popup notify bubble text
// BubbleText(BUBBLE_LEVELUP, 0);
BubbleText((int)BubbleTextType.BUBBLE_LEVELUP, 0);
//
// // Notify my friends that my level changed
// ACHAR szInfo[40];