public override void OnUpdate() { if (_timeSinceStateChanged >= _passenger.DragChangeStatePeriod) { _timeSinceStateChanged = 0; if ((Randomizer.GetPercentageBasedBoolean((int)_passenger.GetAttackProbabilityForClass("conductor")) && !_passenger.IsNearBench) || !_passenger.HasTicket()) { if (!_passenger.IsRunawayDenied()) { StopDragByConductor(true); return; } } } if (_hero.CanKick(_passenger) && !_passenger.HasTicket()) { if (!_passenger.IsRunawayDenied() && Randomizer.GetPercentageBasedBoolean((int)_passenger.GetRunAwayProbabilityForClass("conductor"))) { _floor.OnMouseUp(); _passenger.BeginEscape(_hero); return; } } MovableCharacter.Animator.Play("attacked"); Vector3 targetPos = new Vector3(); if (!_floor.GetCurrentMousePosition(ref targetPos)) { return; } MovableCharacter.transform.position = new Vector3(targetPos.x, targetPos.y, -1); }
public override void HandleDoubleClick() { ConductorSM hero = MonobehaviorHandler.GetMonobeharior().GetObject <Floor>("Floor").GetHero(); if (hero.CanKick(this)) { if (_isFlyAwayDenied) { return; } hero.Kick(this); return; } hero.StartDrag(this); }
public void StopDrag(bool attack) { if (GetActiveState() != (int)MovableCharacterStates.Dragged) { return; } Floor floor = MonobehaviorHandler.GetMonobeharior().GetObject <Floor>("Floor"); floor.OnMouseUp(); ConductorSM conductor = floor.GetHero(); if (conductor.CanKick(this)) { if (!HasTicket()) { BeginEscape(conductor); } } else { if (attack) { if (_isConductorAttackDenied) { MakeIdle(); return; } AttackTarget = conductor; AttackIfPossible(); } else { MakeIdle(); } } }