private void ReceivedHookForcePullMsg(NetIncomingMessage msg) { long id = msg.ReadInt64(); PowerHook hook = GetSceneObject(id) as PowerHook; if (hook == null) { Logger.Warn("Received PowerHook Force Pull but hook with id " + id + " wasn't found -> ignored"); return; } PowerHookControl c = hook.GetControlOfType <PowerHookControl>(); c.ShowForceFieldEffect(); int count = msg.ReadInt32(); for (int i = 0; i < count; ++i) { ISceneObject obj = GetSceneObject(msg.ReadInt64()); if (obj != null) { c.StartPullingObject(obj); } } }
public static Hook ReadObjectHook(this NetIncomingMessage msg, SceneMgr mgr) { Hook h = null; HookType type = (HookType)msg.ReadInt32(); switch (type) { case HookType.HOOK_NORMAL: h = new Hook(mgr, -1); break; case HookType.HOOK_POWER: h = new PowerHook(mgr, -1); break; default: throw new Exception("Unrecognized hook type"); } return(h); }
public static PowerHook CreatePowerHook(SceneMgr mgr, Point point, Player player) { Vector position = new Vector(player.GetBaseLocation().X + player.GetBaseLocation().Width / 2, player.GetBaseLocation().Y - 5); Vector direction = point.ToVector() - position; direction.Normalize(); PowerHook hook = new PowerHook(mgr, IdMgr.GetNewId(mgr.GetCurrentPlayer().GetId())); hook.Owner = player; hook.Radius = 8; position.X -= hook.Radius; position.Y -= hook.Radius; hook.Position = position; hook.Rotation = (float)Vector.AngleBetween(new Vector(0, -1), direction); hook.Direction = direction; hook.Color = Colors.RoyalBlue; hook.SetGeometry(SceneGeometryFactory.CreateHookHead(hook)); SphereCollisionShape cs = new SphereCollisionShape(); cs.Radius = hook.Radius / 2; cs.Center = hook.Center; hook.CollisionShape = cs; PowerHookControl hookControl = new PowerHookControl(); hookControl.Origin = new Vector(hook.Center.X, hook.Center.Y); hookControl.Speed = player.Data.HookSpeed; hookControl.Lenght = player.Data.HookLenght; hook.AddControl(hookControl); hook.AddControl(new StickySphereCollisionShapeControl()); hook.PrepareLine(); return(hook); }