public override void collide(ScreenObject collider, TimeSpan timeSpan) { if (_state != STATE_GROUND) { if ((collider is Shot || collider is WeaponAttack) && collider.getSide() != _side && collider.getState() != STATE_DEAD && collider.getState() != STATE_DYING && _state != STATE_GROUND && _state != STATE_GETTINGHIT) { if (collider is PikeTip) { Pikeman pikeman = ((PikeTip)collider).getPikeman(); if (pikeman.getState() != Pikeman.STATE_RECOILING && pikeman.getState() != STATE_DYING && pikeman.getState() != STATE_DEAD && pikeman.getState() != Soldier.STATE_MELEE_LOSS && pikeman.getState() != Soldier.STATE_MELEE_WIN) { pikeman.recoil(); ground(); } } else if (collider is LanceTip) { Cavalry pikeman = ((LanceTip)collider).getCavalry(); if (pikeman.getState() != Cavalry.STATE_RECOILING && pikeman.getState() != STATE_DYING && pikeman.getState() != STATE_DEAD && pikeman.getState() != Soldier.STATE_MELEE_LOSS && pikeman.getState() != Soldier.STATE_MELEE_WIN) { pikeman.recoil(); ground(); } } else if (collider is Shot) { collider.setState(STATE_DEAD); ground(); } } else if ((collider is Soldier) && collider.getSide() != _side && collider.getState() != STATE_DEAD && collider.getState() != STATE_DEAD && collider.getState() != STATE_DYING && collider.getState() != Soldier.STATE_ONEATTACK && _state != STATE_GROUND && _state != STATE_GETTINGHIT) { ((Soldier)collider).oneAttack(this); _state = STATE_GETTINGHIT; _stateTimer = ((Soldier)collider).getOneAttackTime(); } } }