public override EffectAnimationEntity[] getPreUseAnimationEntity(MyCharacterController src, bool throwhit, params ObjectEntity[] targets) { var ret = new List<EffectAnimationEntity>(); if (throwhit) { foreach (var target in targets) { var c = target as MyCharacterController; if (c != null) { var entity = GameController.EffectAnimationController.singleshotEffect(BasisParameter.EffectAnimationName, c.Position, 1, 1, false); entity.PlaySEName = BasisParameter.PlaySEName; ret.Add(entity); } } } else { var cs = Array.FindAll(targets, t => t is MyCharacterController); if (cs.Length != 0) { foreach (var c in cs) { var entity = GameController.EffectAnimationController.getEffectEntityWithLine(BasisParameter.EffectAnimationName, src.Position, c.Position); entity.PlaySEName = BasisParameter.PlaySEName; ret.Add(entity); } } else { var hit = src.rayCastAll(src.CurrentDirection, 1000, TagList.getLayerMask(TagList.Wall)).ToList(); hit.RemoveAll(h => h.Position == src.CurrentPosition); Vector2 end; if (hit.Count != 0) { end = hit[0].Position; } else { end = MyCharacterController.directionDeltaToVector(src.CurrentDirection) * 20; } var entity = GameController.EffectAnimationController.getEffectEntityWithLine(BasisParameter.EffectAnimationName, src.Position, end); entity.PlaySEName = BasisParameter.PlaySEName; ret.Add(entity); } } return ret.ToArray(); }
protected override MyCharacterController getEffectTarget(MyCharacterController user) { var hit = user.rayCastAll(user.CurrentDirection, 1000, TagList.getLayerMask(TagList.Character)); //GameController.PlayingLogger.addLogFormat("hits:{0}",hit.Length); if (hit.Length != 0) return hit[0] as MyCharacterController; return null; }