public static ItemEntity instantiateShotEntity(ShotItemBasis shotitem, Vector2 pos, MyCharacterController.Direction dir) { Debug.LogFormat("Create ShotEntity1 {0}:{1} Dir:{2}",shotitem.Name,pos,dir); ShotItemBasis shotentity = shotitem.splitShotItem(1); //shotentity.remove(); ItemEntity ret = ObjectEntityFactory.enableItemEntity(shotentity, pos); Debug.LogFormat("Create ShotEntity2 {0}:{1}", ret.Object.Name, pos); ret.shotinit(dir); //ret.setActive(true); //ret.SpriteRenderer.enabled = false; //GameController.spawaObject(ret); return ret; }
public CMD_Shot(PlayerController owner, ShotItemBasis target) : base(owner) { Target = target; }
public static List<Collider2D> searchShotTarget(MyCharacterController.Direction dir, Vector2 centerpos, ShotItemBasis shotitem, bool wallpenatrable = false) { List<Collider2D> ret = new List<Collider2D>(); switch (shotitem.BasisParameter.RangeType) { case ShotItemBasis.RangeType.LINE: int range = wallpenatrable ? PenetrateFlyingDistance : shotitem.BasisParameter.ShotRange; var hits = getHitTargetsFromLine(centerpos, range, dir); //Physics2D.RaycastAll(centerpos, direction, range, hitmask); if (hits.Count != 0) { RaycastHit2D near = hits[0]; if (near.distance <= range && !wallpenatrable) { //Debug.Log(string.Format("{0},{1}",Mathf.FloorToInt(near.distance),Mathf.CeilToInt(near.distance))); //range = Mathf.FloorToInt(near.distance); //if (near.transform.tag.Equals(TagList.Character)) range = Mathf.CeilToInt(near.distance); //Debug.Log(flyingdistance); ret.Add(hits[0].collider); } else if (wallpenatrable) { ret.AddRange(hits.ConvertAll(h => h.collider)); } } //GameController.PlayingLogger.addLogFormat("Hits:{0} WP:{1}",ret.Count,wallpenatrable); break; case ShotItemBasis.RangeType.AREA: Vector2 delta = Vector2.one * Mathf.CeilToInt((shotitem.BasisParameter.ShotRange / 2f)); ret = new List<Collider2D>(Physics2D.OverlapAreaAll(centerpos - delta, centerpos + delta, hitmask)); break; default: break; } ret.RemoveAll(hit => hit.transform.position.Equals(centerpos)); ret.Sort((a, b) => (int)((a.transform.position - (Vector3)centerpos).sqrMagnitude - (b.transform.position - (Vector3)centerpos).sqrMagnitude)); //if (!wallpenatrable && ret.Count > 1) ret.RemoveRange(1, ret.Count - 1); return ret; }
internal static Sprite getShotIcon(ShotItemBasis shotitem,MyCharacterController.Direction dir) { Sprite ret = OtherIcon; switch (shotitem.BasisParameter.Type) { case ShotItemBasis.ShotType.ARROW: ret = ShotItemIcon1; break; case ShotItemBasis.ShotType.CARD: ret = ShotItemIcon3; break; case ShotItemBasis.ShotType.STONE: ret = ShotItemIcon2; break; } return ret; }
public ShotItemDamage(MyCharacterController attacker, MyCharacterController target, ShotItemBasis item) : base(attacker,target) { Item = item; }