private void ProcessEnd(object o) { var tgt = this._data.Target.Current as CChar; var position = tgt.GameHandle.transform.position; var move = o as SRaycastMoveThenDelete; var jolt = move.GetObjectList()[0] as SAttackerJolt; var slimePath = StringUtil.PathBuilder( CombatGUIParams.EFFECTS_PATH, "SlimeCrushSlimeFatality", CombatGUIParams.PARTICLES_EXTENSION); var bloodPath = StringUtil.PathBuilder( CombatGUIParams.EFFECTS_PATH, "SlimeCrushBloodFatality", CombatGUIParams.PARTICLES_EXTENSION); var slimePrefab = Resources.Load(slimePath); var slimeParticles = GameObject.Instantiate(slimePrefab) as GameObject; slimeParticles.transform.position = position; slimeParticles.name = CombatGUIParams.SLIME_FATALITY + " Slime Particles"; var bloodPrefab = Resources.Load(bloodPath); var bloodParticles = GameObject.Instantiate(bloodPrefab) as GameObject; bloodParticles.transform.position = position; bloodParticles.name = CombatGUIParams.SLIME_FATALITY + " Blood Particles"; var slimeLifetime = slimeParticles.AddComponent <SDestroyByLifetime>(); slimeLifetime.Init(slimeParticles, 5f); var bloodLifetime = bloodParticles.AddComponent <SDestroyByLifetime>(); bloodLifetime.Init(bloodParticles, 5f); bloodLifetime.AddCallback(this.CallbackHandler); foreach (var hit in jolt.Action.Data.Hits) { bloodLifetime.AddCallback(hit.CallbackHandler); } for (int i = 0; i < 5; i++) { var sprite = MapSpriteLoader.Instance.GetSlimeSplatter(3); this.LayFatalityDecoRandomPosition(sprite, tgt); } var data = new EvSplatterData(); data.DmgPercent = 1.0; data.Fatality = true; data.Target = tgt.GameHandle; var e = new EvSplatter(data); e.TryProcess(); VCharUtil.Instance.ProcessDeadChar(this._data.Target.Current as CChar); }
public void AssignDeathSplatter(CChar c) { var data = new EvSplatterData(); data.DmgPercent = 0.50; data.Target = c.GameHandle; var e = new EvSplatter(data); e.TryProcess(); }
private void ProcessBloodHelper(CChar target, double percent, bool fatality = false) { var data = new EvSplatterData(); data.DmgPercent = percent; data.Fatality = fatality; data.Target = target.GameHandle; var e = new EvSplatter(data); e.TryProcess(); }
private void AddBloodPool(object o) { if (o.GetType().Equals(typeof(SRaycastMove))) { var script = o as SRaycastMove; var data = new EvSplatterData(); data.DmgPercent = 1; data.Fatality = true; data.Target = script.GetData().Handle; var e = new EvSplatter(data); e.TryProcess(); } }
private void DisplaySplatter(MHit hit) { if (hit.Data.Target.Current != null && hit.Data.Target.Current.GetType().Equals(typeof(CChar))) { var tgt = hit.Data.Target.Current as CChar; if (hit.Data.Dmg > 0 && !hit.Data.IsFatality) { var data = new EvSplatterData(); data.DmgPercent = (hit.Data.Dmg / tgt.Proxy.GetStat(ESecondaryStat.HP)); data.Target = tgt.Tile.Handle; var e = new EvSplatter(data); e.TryProcess(); } } }
private void ProcessHead(object o) { foreach (var hit in this._data.FatalHits) { if (hit.Data.Target.Current != null && hit.Data.Target.Current.GetType().Equals(typeof(CChar))) { var tgt = this._data.Target.Current as CChar; if (tgt.Proxy.Type == ECharType.Humanoid) { VCharUtil.Instance.ProcessDeadChar(tgt); var body = tgt.SubComponents[SortingLayers.CHAR_MAIN]; var data = new EvSplatterData(); data.DmgPercent = 1; data.Fatality = true; data.Target = body; new EvSplatter(data); var head = tgt.SubComponents[SortingLayers.CHAR_HEAD]; var tgtTile = tgt.Tile; var tgtPos = RandomPositionOffset.RandomOffset( tgtTile.Handle.transform.position, FatalityParams.SLASH_HEAD_OFFSET); head.transform.SetParent(tgtTile.Handle.transform); var spinData = new SRotationData(); spinData.Speed = (float)(FatalityParams.SLASH_ROTATION_SPEED * RNG.Instance.NextDouble()); spinData.Target = head; var spinRight = RNG.Instance.RandomNegOrPos(); if (spinRight > 0) { spinData.SpinRight = true; } var spin = head.AddComponent <SRotation>(); spin.Init(spinData); var raycastData = new SRaycastMoveData(); raycastData.Epsilon = FatalityParams.DEFAULT_EPSILON; raycastData.Handle = head; raycastData.Speed = FatalityParams.SLASH_RAYCAST_SPEED; raycastData.Target = tgtPos; var raycast = head.AddComponent <SRaycastMove>(); this.AttachBlood(head, tgt.GameHandle); raycast.AddCallback(this.AddBloodPool); raycast.AddCallback(spin.Done); var callbackDelay = head.AddComponent <SDelayCallback>(); callbackDelay.AddCallback(this.CallbackHandler); callbackDelay.AddCallback(hit.CallbackHandler); callbackDelay.Init(FatalityParams.DEFAULT_DUR); raycast.Init(raycastData); } else { VHitController.Instance.ProcessDefenderHit(hit); } } } }