private void InitializeAnimation() { monProperty = GetComponent <MonProperty>(); if (null == monProperty) { Debug.LogError("Fail to get MonProperty component"); } else { Animation[] componentsInChildren = GetComponentsInChildren <Animation>(); clipNameMgr = new clipNameManager(); clipNameMgr.Alloc(); bipAnimation = null; int num = 0; while (bipAnimation == null && num < componentsInChildren.Length) { bipAnimation = componentsInChildren[num]; clipNameMgr.Add(componentsInChildren[num].clip.name); num++; } if (null == bipAnimation) { Debug.LogError("Fail to get Animation component"); } else { SetIdle(queued: false); } } }
public void DisableAll() { foreach (KeyValuePair <int, GameObject> item in dicMon) { MonProperty component = item.Value.GetComponent <MonProperty>(); component.Desc.Xp = 0; SkinnedMeshRenderer componentInChildren = item.Value.GetComponentInChildren <SkinnedMeshRenderer>(); componentInChildren.enabled = false; } }
private void Start() { deltaTime = 0f; smr = GetComponentInChildren <SkinnedMeshRenderer>(); if (null == smr) { Debug.LogError("Fail to get skinned mesh renderer for flags"); } else if (MyInfoManager.Instance.Seq != RoomManager.Instance.Master) { SkinnedMeshRenderer[] componentsInChildren = GetComponentsInChildren <SkinnedMeshRenderer>(); foreach (SkinnedMeshRenderer skinnedMeshRenderer in componentsInChildren) { if (null == skinnedMeshRenderer) { Debug.LogError("Fail to get skinned mesh renderer for flags"); } else if (MyInfoManager.Instance.Seq != RoomManager.Instance.Master) { skinnedMeshRenderer.enabled = false; } } } orgColor = smr.material.color; GameObject gameObject = GameObject.Find("Me"); if ((bool)gameObject) { localCtrl = gameObject.GetComponent <LocalController>(); if (localCtrl == null) { Debug.LogError("[MonAI.cs] localCtrl is null"); } } monProp = GetComponent <MonProperty>(); if (monProp == null) { Debug.LogError("[MonAI.cs] MonProperty is null"); } monCtrl = GetComponent <MonController>(); if ((bool)(monCtrl = null)) { Debug.LogError("[MonAI.cs] MonController is null"); } traces = new ArrayList(); paths = new ArrayList(); changeTexture(); }
public static HitPart[] CheckMon(Vector3 position, float radius, bool includeFriendly) { List <HitPart> list = new List <HitPart>(); GameObject[] array = MonManager.Instance.ToGameObjectArray(); for (int i = 0; i < array.Length; i++) { MonProperty component = array[i].GetComponent <MonProperty>(); if (null != component && (includeFriendly || component.Desc.IsHostile()) && Vector3.Distance(position, array[i].transform.position) < radius) { HitPart[] componentsInChildren = array[i].GetComponentsInChildren <HitPart>(); list.Add(componentsInChildren[0]); } } return(list.ToArray()); }
public override void changeTexture() { Defense component = GameObject.Find("Main").GetComponent <Defense>(); if (component != null) { MonProperty component2 = GetComponent <MonProperty>(); smr = GetComponentInChildren <SkinnedMeshRenderer>(); if (null == smr) { Debug.LogError("Fail to get skinned mesh renderer for flags"); } if (component2.Desc.bRedTeam) { ((Component)smr).renderer.material.mainTexture = component.texBee2Red; } else { ((Component)smr).renderer.material.mainTexture = component.texBee2Blue; } } }
private void CheckSlash() { if (isValidRange) { int layerMask = (1 << LayerMask.NameToLayer("Chunk")) | (1 << LayerMask.NameToLayer("Brick")) | (1 << LayerMask.NameToLayer("BoxMan")) | (1 << LayerMask.NameToLayer("Mon")) | (1 << LayerMask.NameToLayer("InvincibleArmor")) | (1 << LayerMask.NameToLayer("Bomb")) | (1 << LayerMask.NameToLayer("InstalledBomb")); Ray ray = cam.ScreenPointToRay(new Vector3((float)(Screen.width / 2), (float)(Screen.height / 2), 0f)); if (Physics.Raycast(ray, out RaycastHit hitInfo, GetComponent <Weapon>().range, layerMask)) { GameObject gameObject = null; GameObject gameObject2 = hitInfo.transform.gameObject; if (gameObject2.layer == LayerMask.NameToLayer("Chunk") || gameObject2.layer == LayerMask.NameToLayer("Brick")) { BrickProperty brickProperty = null; GameObject gameObject3 = null; if (gameObject2.layer == LayerMask.NameToLayer("Brick")) { BrickProperty[] allComponents = Recursively.GetAllComponents <BrickProperty>(gameObject2.transform, includeInactive: false); if (allComponents.Length > 0) { brickProperty = allComponents[0]; } } else { gameObject = BrickManager.Instance.GetBrickObjectByPos(Brick.ToBrickCoord(hitInfo.normal, hitInfo.point)); if (null != gameObject) { brickProperty = gameObject.GetComponent <BrickProperty>(); } } if (null != brickProperty) { P2PManager.Instance.SendPEER_HIT_BRICK(brickProperty.Seq, brickProperty.Index, hitInfo.point, hitInfo.normal, isBullet: false); gameObject3 = BrickManager.Instance.GetBulletImpact(brickProperty.Index); Brick brick = BrickManager.Instance.GetBrick(brickProperty.Index); if (brick != null && brick.destructible) { brickProperty.Hit((int)CalcAtkPow()); if (brickProperty.HitPoint <= 0) { if (!Application.loadedLevelName.Contains("Tutor")) { CSNetManager.Instance.Sock.SendCS_DESTROY_BRICK_REQ(brickProperty.Seq); } gameObject3 = null; if (brickProperty.Index == 115 || brickProperty.Index == 193) { CheckMyself(gameObject.transform.position, GlobalVars.Instance.BoomRadius); CheckBoxmen(gameObject.transform.position, GlobalVars.Instance.BoomRadius); CheckMonster(gameObject.transform.position, GlobalVars.Instance.BoomRadius); CheckDestructibles(gameObject.transform.position, GlobalVars.Instance.BoomRadius); } } else { P2PManager.Instance.SendPEER_BRICK_HITPOINT(brickProperty.Seq, brickProperty.HitPoint); } } } if (null != gameObject3) { Object.Instantiate((Object)gameObject3, hitInfo.point, Quaternion.FromToRotation(Vector3.up, hitInfo.normal)); } } else if (gameObject2.layer == LayerMask.NameToLayer("BoxMan")) { PlayerProperty[] allComponents2 = Recursively.GetAllComponents <PlayerProperty>(gameObject2.transform, includeInactive: false); TPController[] allComponents3 = Recursively.GetAllComponents <TPController>(gameObject2.transform, includeInactive: false); if (allComponents2.Length != 1) { Debug.LogError("PlayerProperty should be unique for a box man, but it has multiple PlayerProperty components or non "); } if (allComponents3.Length != 1) { Debug.LogError("TPController should be unique for a box man, but it has multiple TPController components or non "); } PlayerProperty playerProperty = null; TPController tPController = null; if (allComponents2.Length > 0) { playerProperty = allComponents2[0]; } if (allComponents3.Length > 0) { tPController = allComponents3[0]; } if (playerProperty != null && tPController != null) { int num = 0; HitPart component = gameObject2.GetComponent <HitPart>(); if (component != null) { if (component.GetHitImpact() != null) { Object.Instantiate((Object)component.GetHitImpact(), hitInfo.point, Quaternion.Euler(0f, 0f, 0f)); } num = (int)(CalcAtkPow() * component.damageFactor); if (!playerProperty.IsHostile()) { num = 0; } WeaponFunction component2 = GetComponent <WeaponFunction>(); if (null == component2) { Debug.LogError("wpnFunc == nulll"); } TWeapon tWeapon = (TWeapon)GetComponent <Weapon>().tItem; if (tWeapon == null) { Debug.LogError("wpn == null"); } Item item = MyInfoManager.Instance.GetItemBySequence(component2.ItemSeq); if (item == null) { item = MyInfoManager.Instance.GetUsingEquipByCode(tWeapon.code); } num = GlobalVars.Instance.applyDurabilityDamage(item?.Durability ?? (-1), tWeapon.durabilityMax, num); P2PManager.Instance.SendPEER_HIT_BRICKMAN(MyInfoManager.Instance.Seq, playerProperty.Desc.Seq, (int)component.part, hitInfo.point, hitInfo.normal, lucky: false, 0, ray.direction); P2PManager.Instance.SendPEER_PIERCE(MyInfoManager.Instance.Seq, playerProperty.Desc.Seq, num, Rigidity, (int)weaponBy); } tPController.GetHit(num, playerProperty.Desc.Seq); } } else if (gameObject2.layer == LayerMask.NameToLayer("Mon")) { MonProperty[] allComponents4 = Recursively.GetAllComponents <MonProperty>(gameObject2.transform, includeInactive: false); MonProperty monProperty = null; if (allComponents4.Length > 0) { monProperty = allComponents4[0]; } if (monProperty != null) { HitPart component3 = gameObject2.GetComponent <HitPart>(); if (component3 != null) { if ((MyInfoManager.Instance.Slot < 4 && monProperty.Desc.bRedTeam) || (MyInfoManager.Instance.Slot >= 4 && !monProperty.Desc.bRedTeam)) { return; } if (component3.GetHitImpact() != null) { Object.Instantiate((Object)component3.GetHitImpact(), hitInfo.point, Quaternion.Euler(0f, 0f, 0f)); } if (monProperty.Desc.Xp <= 0) { return; } int num2 = (int)(CalcAtkPow() * component3.damageFactor); if (monProperty.Desc.bHalfDamage) { num2 /= 2; } MonManager.Instance.Hit(monProperty.Desc.Seq, num2, 0f, (int)weaponBy, Vector3.zero, Vector3.zero, -1); } } } else if (gameObject2.layer == LayerMask.NameToLayer("InvincibleArmor") || gameObject2.layer == LayerMask.NameToLayer("Bomb") || gameObject2.layer == LayerMask.NameToLayer("InstalledBomb")) { GameObject impact = VfxOptimizer.Instance.GetImpact(gameObject2.layer); if (null != impact) { Object.Instantiate((Object)impact, hitInfo.point, Quaternion.FromToRotation(Vector3.up, hitInfo.normal)); P2PManager.Instance.SendPEER_HIT_IMPACT(gameObject2.layer, hitInfo.point, hitInfo.normal); } } isValidRange = false; } } }
private void Shoot() { Vector2 vector = accuracy.CalcDeflection(); int layerMask = (1 << LayerMask.NameToLayer("Chunk")) | (1 << LayerMask.NameToLayer("Brick")) | (1 << LayerMask.NameToLayer("BoxMan")) | (1 << LayerMask.NameToLayer("Mon")) | (1 << LayerMask.NameToLayer("InvincibleArmor")) | (1 << LayerMask.NameToLayer("Bomb")) | (1 << LayerMask.NameToLayer("InstalledBomb")); Ray ray = cam.ScreenPointToRay(new Vector3(vector.x, vector.y, 0f)); if (!Application.loadedLevelName.Contains("Tutor")) { P2PManager.Instance.SendPEER_CANNON_FIRE(BrickSeq, shooter, ray.origin, ray.direction); } if (Physics.Raycast(ray, out RaycastHit hitInfo, Range, layerMask)) { GameObject gameObject = hitInfo.transform.gameObject; if (gameObject.layer == LayerMask.NameToLayer("Brick") || gameObject.layer == LayerMask.NameToLayer("Chunk")) { GameObject gameObject2 = null; BrickProperty brickProperty = null; GameObject original = null; Texture2D mark = null; if (gameObject.layer == LayerMask.NameToLayer("Brick")) { BrickProperty[] allComponents = Recursively.GetAllComponents <BrickProperty>(gameObject.transform, includeInactive: false); if (allComponents.Length > 0) { brickProperty = allComponents[0]; } } else { gameObject2 = BrickManager.Instance.GetBrickObjectByPos(Brick.ToBrickCoord(hitInfo.normal, hitInfo.point)); if (null != gameObject2) { brickProperty = gameObject2.GetComponent <BrickProperty>(); } } if (null != brickProperty) { P2PManager.Instance.SendPEER_HIT_BRICK(brickProperty.Seq, brickProperty.Index, hitInfo.point, hitInfo.normal, isBullet: true); mark = BrickManager.Instance.GetBulletMark(brickProperty.Index); original = BrickManager.Instance.GetBulletImpact(brickProperty.Index); Brick brick = BrickManager.Instance.GetBrick(brickProperty.Index); if (brick != null && brick.destructible) { brickProperty.Hit((int)AtkPow); if (brickProperty.HitPoint <= 0) { CSNetManager.Instance.Sock.SendCS_DESTROY_BRICK_REQ(brickProperty.Seq); mark = null; original = null; if (brickProperty.Index == 115 || brickProperty.Index == 193) { ExplosionUtil.CheckMyself(gameObject2.transform.position, GlobalVars.Instance.BoomDamage, GlobalVars.Instance.BoomRadius, -3); ExplosionUtil.CheckBoxmen(gameObject2.transform.position, GlobalVars.Instance.BoomDamage, GlobalVars.Instance.BoomRadius, -3, Rigidity); ExplosionUtil.CheckMonster(gameObject2.transform.position, GlobalVars.Instance.BoomDamage, GlobalVars.Instance.BoomRadius); ExplosionUtil.CheckDestructibles(gameObject2.transform.position, GlobalVars.Instance.BoomDamage, GlobalVars.Instance.BoomRadius); } } else { P2PManager.Instance.SendPEER_BRICK_HITPOINT(brickProperty.Seq, brickProperty.HitPoint); } } } if (null != gameObject2 && null != mark) { GameObject gameObject3 = Object.Instantiate((Object)BrickManager.Instance.bulletMark, hitInfo.point, Quaternion.FromToRotation(Vector3.forward, -hitInfo.normal)) as GameObject; BulletMark component = gameObject3.GetComponent <BulletMark>(); component.GenerateDecal(mark, gameObject, gameObject2); } if (null != original) { Object.Instantiate((Object)original, hitInfo.point, Quaternion.FromToRotation(Vector3.up, hitInfo.normal)); } } else if (gameObject.layer == LayerMask.NameToLayer("BoxMan")) { PlayerProperty[] allComponents2 = Recursively.GetAllComponents <PlayerProperty>(gameObject.transform, includeInactive: false); TPController[] allComponents3 = Recursively.GetAllComponents <TPController>(gameObject.transform, includeInactive: false); if (allComponents2.Length != 1) { Debug.LogError("PlayerProperty should be unique for a box man, but it has multiple PlayerProperty components or non "); } if (allComponents3.Length != 1) { Debug.LogError("TPController should be unique for a box man, but it has multiple TPController components or non "); } PlayerProperty playerProperty = null; TPController tPController = null; if (allComponents2.Length > 0) { playerProperty = allComponents2[0]; } if (allComponents3.Length > 0) { tPController = allComponents3[0]; } if (playerProperty != null && tPController != null) { int num = 0; HitPart component2 = gameObject.GetComponent <HitPart>(); if (component2 != null) { bool flag = false; if (component2.part == HitPart.TYPE.HEAD) { int layerMask2 = 1 << LayerMask.NameToLayer("Brain"); if (Physics.Raycast(ray, out RaycastHit hitInfo2, Range, layerMask2)) { if (playerProperty.Desc.IsLucky()) { flag = true; } else { component2 = hitInfo2.transform.gameObject.GetComponent <HitPart>(); } } } if (component2.GetHitImpact() != null) { GameObject original2 = component2.GetHitImpact(); if (flag && null != component2.luckyImpact) { original2 = component2.luckyImpact; } Object.Instantiate((Object)original2, hitInfo.point, Quaternion.Euler(0f, 0f, 0f)); } num = (int)(AtkPow * component2.damageFactor); if (!playerProperty.IsHostile()) { num = 0; } P2PManager.Instance.SendPEER_HIT_BRICKMAN(MyInfoManager.Instance.Seq, playerProperty.Desc.Seq, (int)component2.part, hitInfo.point, hitInfo.normal, flag, 0, ray.direction); P2PManager.Instance.SendPEER_SHOOT(MyInfoManager.Instance.Seq, playerProperty.Desc.Seq, num, Rigidity, (int)weaponBy, (int)component2.part, flag, rateOfFire); } tPController.GetHit(num, playerProperty.Desc.Seq); } } else if (gameObject.layer == LayerMask.NameToLayer("Mon")) { MonProperty[] allComponents4 = Recursively.GetAllComponents <MonProperty>(gameObject.transform, includeInactive: false); MonProperty monProperty = null; if (allComponents4.Length > 0) { monProperty = allComponents4[0]; } if (monProperty != null) { HitPart component3 = gameObject.GetComponent <HitPart>(); if (component3 != null && (MyInfoManager.Instance.Slot >= 4 || !monProperty.Desc.bRedTeam) && (MyInfoManager.Instance.Slot < 4 || monProperty.Desc.bRedTeam)) { if (component3.GetHitImpact() != null) { Object.Instantiate((Object)component3.GetHitImpact(), hitInfo.point, Quaternion.Euler(0f, 0f, 0f)); } if (monProperty.Desc.Xp > 0) { int num2 = (int)(AtkPow * component3.damageFactor); num2 += DefenseManager.Instance.AddAtkPower; if (monProperty.Desc.bHalfDamage) { num2 /= 2; } MonManager.Instance.Hit(monProperty.Desc.Seq, num2, 0f, (int)weaponBy, hitInfo.point, hitInfo.normal, -1); } } } } else if (gameObject.layer == LayerMask.NameToLayer("InvincibleArmor") || gameObject.layer == LayerMask.NameToLayer("Bomb") || gameObject.layer == LayerMask.NameToLayer("InstalledBomb")) { GameObject impact = VfxOptimizer.Instance.GetImpact(gameObject.layer); if (null != impact) { Object.Instantiate((Object)impact, hitInfo.point, Quaternion.FromToRotation(Vector3.up, hitInfo.normal)); P2PManager.Instance.SendPEER_HIT_IMPACT(gameObject.layer, hitInfo.point, hitInfo.normal); } } } }
private void Update() { if (BrickManager.Instance.IsLoaded && !bDie && (MyInfoManager.Instance.Seq == RoomManager.Instance.Master || readyP2P != 0)) { if (MyInfoManager.Instance.Seq == RoomManager.Instance.Master) { vCur = UpdateAI(); } else { vCur = UpdateAIP2P(); } base.transform.position = vCur; CheckPositionPrev(); if (bHitMark) { timerHitMark += Time.deltaTime; float num = timerHitMark; num *= 4f; if (num > 1f) { num = 2f - num; } float num2 = Mathf.Lerp(0f, orgColor.g, num); float num3 = Mathf.Lerp(0f, orgColor.b, num); Material material = smr.material; float g = orgColor.g - num2; float b = orgColor.b - num3; Color color = smr.material.color; material.color = new Color(1f, g, b, color.a); if (timerHitMark > 0.5f) { Material material2 = smr.material; float r = orgColor.r; float g2 = orgColor.g; float b2 = orgColor.b; Color color2 = smr.material.color; material2.color = new Color(r, g2, b2, color2.a); bHitMark = false; } } if (MyInfoManager.Instance.Seq == RoomManager.Instance.Master && readyP2P == 2) { timerSendP2PMove += Time.deltaTime; if (timerSendP2PMove >= 0.4f) { timerSendP2PMove = 0f; P2PManager instance = P2PManager.Instance; int seq = monProp.Desc.Seq; float x = vCur.x; float y = vCur.y; float z = vCur.z; Vector3 forward = base.transform.forward; float x2 = forward.x; Vector3 forward2 = base.transform.forward; float y2 = forward2.y; Vector3 forward3 = base.transform.forward; instance.SendPEER_MON_MOVE(seq, x, y, z, x2, y2, forward3.z); } } CheckColHit(); CheckHit(); if (eff != null) { eff.transform.position = base.transform.position; } switch (monType) { case MON_TYPE.FLASH: updateSkill(); break; case MON_TYPE.HIDE: updateHide(); break; case MON_TYPE.HEAL: updateSelfHeal(); break; case MON_TYPE.BOSS: updateAreaHeal(); break; } if (bArrived) { MonProperty component = GetComponent <MonProperty>(); if (component.Desc.tblID == 4) { MonManager.Instance.BossUnVisibleAll(component.Desc.bRedTeam); } if (MyInfoManager.Instance.Seq == RoomManager.Instance.Master) { P2PManager.Instance.SendPEER_MON_DIE(component.Desc.Seq, arrived: true); if (component.Desc.bRedTeam) { DefenseManager.Instance.CoreLifeBlue -= monProp.Desc.coreToDmg; } else { DefenseManager.Instance.CoreLifeRed -= monProp.Desc.coreToDmg; } CSNetManager.Instance.Sock.SendCS_CORE_HP_REQ(DefenseManager.Instance.CoreLifeRed, DefenseManager.Instance.CoreLifeBlue); } MonManager.Instance.Remove(component.Desc.Seq); bDie = true; } } }
public GameObject AddMon(MonDesc desc) { SpawnerDesc spawner = BrickManager.Instance.GetSpawner(Brick.SPAWNER_TYPE.DEFENCE_SPAWNER, 0); if (spawner == null) { return(null); } Vector3 position = spawner.position; GameObject gameObject = null; if (desc.tblID == 0) { gameObject = (Object.Instantiate((Object)bee01, position, Quaternion.Euler(0f, 0f, 0f)) as GameObject); } else if (desc.tblID == 1) { gameObject = (Object.Instantiate((Object)bee02, position, Quaternion.Euler(0f, 0f, 0f)) as GameObject); } else if (desc.tblID == 2) { gameObject = (Object.Instantiate((Object)intruder01, position, Quaternion.Euler(0f, 0f, 0f)) as GameObject); } else if (desc.tblID == 3) { gameObject = (Object.Instantiate((Object)bomber01, position, Quaternion.Euler(0f, 0f, 0f)) as GameObject); } else if (desc.tblID == 4) { gameObject = (Object.Instantiate((Object)champ01, position, Quaternion.Euler(0f, 0f, 0f)) as GameObject); } if (null == gameObject) { Debug.LogError("Fail to instantiate a monster: " + desc.tblID); return(null); } MonProperty component = gameObject.GetComponent <MonProperty>(); if (null == component) { Object.DestroyImmediate(gameObject); Debug.LogError("New monster doesnt have MonProperty: " + desc.tblID); return(null); } component.Desc = desc; component.Desc.coreToDmg = DefenseManager.Instance.GetMonTable(desc.tblID).toCoreDmg; component.Desc.InitLog(); component.InvisiblePosition = position; MonAI aIClass = Instance.GetAIClass(gameObject, desc.tblID); if (null == aIClass) { Object.DestroyImmediate(gameObject); Debug.LogError("New monster doesnt have monAI: " + desc.tblID); return(null); } aIClass.StartPosition = position; aIClass.moveSpeed = DefenseManager.Instance.GetMonTable(desc.typeID).MoveSpeed; aIClass.MonType = (MonAI.MON_TYPE)desc.typeID; dicMon.Add(desc.Seq, gameObject); aIClass.changeTexture(); if (MyInfoManager.Instance.Seq == RoomManager.Instance.Master) { P2PManager instance = P2PManager.Instance; int tblID = desc.tblID; int typeID = desc.typeID; int seq = desc.Seq; float x = position.x; float y = position.y; float z = position.z; Vector3 forward = gameObject.transform.forward; float x2 = forward.x; Vector3 forward2 = gameObject.transform.forward; float y2 = forward2.y; Vector3 forward3 = gameObject.transform.forward; instance.SendPEER_MON_GEN(tblID, typeID, seq, x, y, z, x2, y2, forward3.z); } return(gameObject); }